back end/java

[java] class의 모든 field 가져오기 (private 포함)

노루아부지 2022. 11. 10. 23:09
반응형

개발을 하다 보면 프로그램 내에서 class안의 모든 변수명을 알아야 하는 경우가 있습니다.

물론 super class(부모 클래스)를 포함해서요.

다음과 같은 방법이 있습니다.

 

먼저, 방법을 알아보기 앞서 클래스를 생성합니다.

public class ParentClass {
  private String field1;
  private String field2;
  private String field3;
}
public class ChildClass extends ParentClass {
  private String field4;
  private String field5;
  private String field6;
  public String field7;
}

 

 

방법 1. getDeclaredFields()을 사용한 방법.

getDeclaredFields()는 현재 클래스의 모든 field를 구할 수 있습니다. 하지만 이 method는 super class의 field는 알 수 없습니다. 따라서 super class를 찾을 수 없을 때까지 반복문을 사용합니다.

또한 아래 예제는 java 8부터 지원하는 람다식을 사용한 방법입니다.

public class Test {
  public static void main(String[] args) {
    Class<?> current = ChildClass.class;

    while(current.getSuperclass()!=null){
      Arrays.stream(current.getDeclaredFields()).forEach(field -> {
        System.out.println(field.getName());
      });

      current = current.getSuperclass();
    }
  }
}

 

 

방법2. ReflectionUtils.doWithFields(baseClass, FieldCallback) 사용

Spring Framework을 사용한다면 ReflectionUtils.doWithFields를 사용하여 간단하게 모든 field를 찾을 수 있습니다.

public class Test {
  public static void main(String[] args) {
    ReflectionUtils.doWithFields(ChildClass.class, field -> {
      System.out.println(field.getName());
    });
  }
}
728x90
반응형
loading