더북(TheBook)

다음은 지정한 클래스의 모든 메서드를 출력하는 방법이다.

Class<?> cl = Class.forName(className);

while (cl != null) {

    for (Method m : cl.getDeclaredMethods()) {

        System.out.println(

            Modifier.toString(m.getModifiers()) + " " +

            m.getReturnType().getCanonicalName() + " " +

            m.getName() +

            Arrays.toString(m.getParameters()));

    }

    cl = cl.getSuperclass();

}


이 코드에서 주목할 점은 프로그램을 컴파일한 시점에 이용할 수 있는 클래스뿐만 아니라 자바 가상 머신이 로드할 수 있는 모든 클래스를 이 코드로 분석할 수 있다는 점이다.

icon Caution

15장 자바 플랫폼 모듈 시스템에서 배우겠지만, 자바 플랫폼 모듈 시스템(Java Platform Module System, JPMS)은 리플렉션을 이용한 접근을 상당히 제한한다. 기본적으로 같은 모듈에 속한 클래스만 리플렉션으로 분석할 수 있다. 모듈을 선언하지 않으면 모든 클래스가 단일 모듈에 속하며, 모두 리플렉션으로 접근할 수 있다. 하지만 자바 라이브러리 클래스는 다른 모듈에 속하므로 이들의 공개가 아닌 멤버에는 리플렉션으로 접근하지 못한다.

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