더북(TheBook)

4.5.2 객체 조사


앞에서 살펴보았듯이 객체에 속한 필드의 타입과 이름을 기술하는 Field 객체를 얻을 수 있다. Field 객체를 이용하면 지정한 필드를 가진 객체의 필드 값에 접근할 수 있다.

예를 들어 다음 코드는 객체에 속한 모든 필드의 내용을 나열하는 방법이다.

Object obj = ...;

for (Field f : obj.getClass().getDeclaredFields()) {

    f.setAccessible(true);

    Object value = f.get(obj);

    System.out.println(f.getName() + ":" + value);

}


핵심은 필드 값을 읽어 오는 get 메서드다. get 메서드는 필드 값이 기본 타입 값이면 래퍼 객체를 반환한다. 이 경우 get 대신 getInt, getDouble 등 메서드를 호출해 실제 값을 얻어 올 수도 있다.

Note ≣

비공개 FieldMethod 객체를 사용하려면 먼저 객체를 ‘접근 가능하게’ 만들어야 한다. setAccessible(true)를 호출하면 해당 필드 또는 메서드를 리플렉션용으로 ‘잠금 해제’한다. 하지만 모듈 시스템이나 보안 관리자가 해당 요청을 막고 이 방식으로 객체에 접근하지 못하게 보호할 수도 있다. 이때 setAccessible 메서드는 InaccessibleObjectException이나 SecurityException을 일으킨다. 필드나 메서드에 접근할 수 없는 경우 false를 반환하는 trySetAccessible 메서드를 호출하는 방법도 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.