리플렉션
클래스 정보 조회
Class<T>
라는 타입을 통해 클래스의 모든 정보(ex. 필드, 메서드, 상위 클래스, 인터페이스, 어노테이션, 생성자 등)를 조회할 수 있다.클래스를 문자열을 통해 읽을 수 있으며,
Class.forName("MyClass")
와 같이 사용할 수 있다. 만약 해당 클래스가 없다면 ClassNotFoundException이 발생한다.
어노테이션과 리플렉션
@Retention
: 어노테이션을 유지하는 기간을 설정한다.SOURCE, CLASS, RUNTIME 속성을 사용 가능하며 기본적으로 RUNTIME 속성이 사용된다.
SOURCE 레벨은 말그대로 소스 코드 까지 어노테이션을 유지하는 것이다.
CLASS 레벨은 바이트 코드까지 어노테이션을 유지하는 것이다.
RUNTIME 레벨은 실제 런타임까지 어노테이션을 유지하는 것으로, 리플렉션으로 어노테이션을 읽으려면 이 속성을 사용해야 한다.
@Inherited
: 부모 클래스에 어노테이션을 붙였을 때 자식 클래스에도 어노테이션을 적용한다.@Target
: 어노테이션을 어디에서까지 사용할 수 있는지 설정한다.TYPE, FIELD, METHOD 등 어느 곳에 어노테이션을 붙일 수 있는지 지정한다.
어노테이션은 primitive 타입 혹은 boxing된 타입을 필드로 가질 수 있다.
리플렉션을 통해 어노테이션의 정보를 얻을 수 있다.
클래스 정보 수정 및 실행
객체 생성하기
객체의 필드 조회/수정하기
메서드 실행하기
주의점
지나친 사용은 성능 이슈를 야기할 수 있으니 반드시 필요한 경우에만 사용해야 한다.
컴파일 타임에 확인되지 않은 문제가 런타임에 발생할 수 있다.
접근 지시자를 무시할 수 있다.
Last updated