Octoping의 블로그

java reflect를 사용하면 클래스에서 멤버변수의 이름들을 얻어오거나, 메소드를 실행하는 등의 다양한 작업을 할 수 있다.

멤버변수들의 정보가 담긴 Field 객체들의 배열을 얻어오는 getDeclaredFields() 메소드와
메소드를 동적으로 실행할 수 있게 해주는 invoke() 메소드를 이용해서 
특정 클래스 객체 내의 모든 멤버변수 이름과 값을 가져올 수 있다.

 


알고리즘 요약
1. getDeclaredFields() 를 통해 멤버변수들의 Field 배열을 얻음
2. getName() 을 통해 각 멤버변수 Field 객체에서 변수명을 얻음
3. ②에서 얻은 변수명을 통해 getter 함수 명을 만든 후 invoke()를 이용하여 getter 함수 실행 후 결과값 얻음

 

// ※ import java.lang.reflect.* 필요함 ※

// voClass: myClass의 클래스 정보
myClass vo = new myClass();
Class<myClass> voClass = myClass.class;

// getDeclaredFields 메소드를 통해 voClass의 멤버변수들의 배열을 얻어옴
for(Field varData : voClass.getDeclaredFields())
{
    String varName = varData.getName(); 
    String varGetterName = "get" + 
                            varName.charAt(0).toUpperCase() + 
                            varName.substring(1);

    // varGetterMethod : voClass의 varGetterName의 값과 같은 이름을 가진 메소드 정보
    Method varGetterMethod = voClass.getMethod(varGetterName);

    // varGetterMethod에 담긴 메소드를 invoke()를 통해 vo 객체에서 실행
    int varValue = (int) varGetterMethod.invoke(vo);

    System.out.println("멤버변수 이름: " + varName);
    System.out.println("멤버변수 값  : " + varValue);
}
profile

Octoping의 블로그

@Octoping

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!