본문 바로가기
IT/Java

java 에서 동적 메서드 (reflection)

by 성준하이 2023. 4. 4.
반응형
Reflection 이란?

자바에서 메서드를 사용할때 대부분 구체적인 메서드를 가지고 개발을 하지만

동적으로 작업을 하던가, 구체적인 클래스 타입을 알지 못하더라도

해당 클래스의 메서드, 타입, 변수들에 접근을 해주는 자바 API 이다.

디버깅 단계에서가 아닌 런타임 시에 클래스를 가져오는 경우 해당 API를 자주 사용하게 된다.

 

예제는 아래와 같다.

class Member {
    String id;

    Member() {
        this.id = "name";
    }

    Member(String id) {
        this.id = id;
    }

    int getId() {
        return this.id;
    }
}

이렇게 Member 클래스가 존재한다.

 

생성자 찾기
getDeclaredConstructor()를 이용해 클래스로부터 생성자를 가져올수 있다.

인자가 없는 생성자를 가져오게 된다.

Class c = Class.forName("Member");
Constructor constructor = c.getDeclaredConstructor();

 

Method 찾기

Class c = Member.class;
Method[] methods = c.getDeclaredMethods();    
System.out.println(methods[0].invoke(c.newInstance()))

 

Field 변경

Class c = Member.class;
Field[] field = c.getDeclaredFields();
System.out.println(field[0]);   

 

받아온 객체 값 가져오기(inDtoObject 내에서)

public static String convertParameter(Object obj) throws IllegalAccessException {

    for (Field field : obj.getClass().getDeclaredFields()) {
      field.setAccessible(true);
      Object value = field.get(obj);

    }

 

Field 가져오기(set 한것)

Class c = Member.class;
Field[] field = c.getDeclaredFields();

Member m = new Member();
field[0].set(id, "name");
System.out.println(field[0].get(m));  

 

반응형

댓글