Target — 적용 대상 애너테이션
Target — 적용 대상 애너테이션
@Target은 애너테이션 인터페이스가 적용 가능한 컨텍스트를 나타냅니다. 애너테이션 인터페이스가 적용될 수 있는 선언 컨텍스트와 타입 컨텍스트는 JLS 9.6.4.1에 명시되며, 소스 코드에서는 java.lang.annotation.ElementType의 열거 상수로 나타냅니다.
본문
애너테이션 인터페이스 T에 @Target 메타 애너테이션이 없으면, T 타입의 애너테이션은 어떤 선언의 수정자로도 쓸 수 있습니다. @Target이 있으면 컴파일러가 ElementType 열거 상수가 나타내는 사용 제한을 JLS 9.7.4에 따라 강제합니다.
@Documented
@Retention(RUNTIME)
@Target(ANNOTATION_TYPE)
public @interface Target
예를 들어 다음은 선언된 인터페이스가 그 자체로 메타 애너테이션 인터페이스임을 나타냅니다. 애너테이션 인터페이스 선언에만 사용할 수 있습니다.
@Target(ElementType.ANNOTATION_TYPE)
public @interface MetaAnnotationType { ... }
다음 @Target은 선언된 클래스 또는 인터페이스가 복잡한 애너테이션 인터페이스 선언에서 멤버로만 사용되도록 의도되었음을 나타냅니다.
@Target({})
public @interface MemberInterface { ... }
단일 ElementType 상수가 @Target 애너테이션 안에 두 번 이상 나타나면 컴파일 타임 오류입니다. 예를 들어 다음은 잘못된 예입니다.
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.FIELD})
public @interface Bogus { ... }
요소
ElementType[] value
value— 이 애너테이션이 적용 가능한 컨텍스트를 나타내는ElementType배열입니다.