@Documented는 자바 문서에 문서화 여부를 결정하고, @Retention은 애너테이션의 지속 시간을 설정합니다.
▼ 표 13-4 @Retention의 속성
속성 |
설명 |
Source |
소스 코드까지만 유지합니다. 즉, 컴파일하면 해당 애너테이션 정보는 사라집니다. |
Class |
컴파일한 .class 파일에 유지합니다. 즉, 런타임을 할 때 클래스를 메모리로 읽어 오면 해당 정보는 사라집니다. |
Runtime |
런타임을 할 때도 .class 파일에 유지합니다. 사용자 정의 애너테이션을 만들 때 주로 사용합니다. |
@Target은 필드, 메서드, 클래스 등 애너테이션을 작성하는 곳입니다.
▼ 표 13-5 @Target의 속성
속성 |
애너테이션 적용 시점 |
TYPE |
class, interface, enum |
FIELD |
클래스의 멤버 변수 |
METHOD |
메서드 |
PARAMETER |
메서드 인자 |
CONSTRUCTOR |
생성자 |
LOCAL_VARIABLE |
로컬 변수 |
ANNOTATION_TYPE |
애너테이션 타입에만 적용 |
PACKAGE |
패키지 |
TYPE_PARAMETER |
제네릭 타입 변수(예 MyClass<T>) |
TYPE_USE |
어떤 타입에도 적용(예 extends, implements, 객체 생성할 때 등) |