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);
}
'언어 > Java' 카테고리의 다른 글
잘못된 값을 입력하면 예외를 발생시키고 입력 다시 받기 (0) | 2023.11.07 |
---|---|
record에서 배열 사용하지 않기 (0) | 2023.08.28 |
언박싱 메소드 (0) | 2022.06.18 |
Divided by Zero 에러 double 형 (0) | 2022.06.18 |