packagecom.hacademy.reflection3;publicclassTest01 {publicstaticvoidmain(String[] args) throwsClassNotFoundException {Class<?extendsMember> a =newMember().getClass();Class<Member> b =Member.class;Class<?> c =Class.forName("com.hacademy.reflection3.Member");System.out.println(a);System.out.println(b);System.out.println(c); }}
위의 코드 중에서 객체 없이 설정한 값에 의해 클래스 정보를 불러올 수 있는 방식은 c이다.
Class<?> c =Class.forName("com.hacademy.reflection3.Member");
Class.forName() 은 대상 클래스의 정보를 클래스로더(ClassLoader)에 등록한 뒤 반환하는 명령이다. 이 때, 대상의 static 정보들은 미리 등록된다.
Properties 또는 기타 입출력 방식을 통하여 불러온 정보로도 클래스 정보를 불러올 수 있다.
필드 정보
packagecom.hacademy.reflection3;importjava.lang.reflect.Field;publicclassTest03 {publicstaticvoidmain(String[] args) throwsClassNotFoundException {Class<?> c =Class.forName("com.hacademy.reflection3.Member");System.out.println("<accessible field list>");for(Field field :c.getFields()) {System.out.println(field); }System.out.println("<declared all field list>");for(Field field :c.getDeclaredFields()) {System.out.println(field); } }}
Field는 접근 가능한 필드와 전체 필드를 조회하는 명령이 각각 존재한다.
getFields() - 상속관계를 포함한 접근 가능한 Field 목록 반환
getDeclaredFields() - 해당 클래스에 명시된 전체 Field 목록 반환
현재 Member 클래스에는 private field만 존재하므로 getFields() 로는 결과가 나오지 않고 getDeclaredFields()로만 결과가 나오는 것을 확인할 수 있다.