Target — 적용 대상 애너테이션

Target — 적용 대상 애너테이션

@Target은 애너테이션 인터페이스가 적용 가능한 컨텍스트를 나타냅니다. 애너테이션 인터페이스가 적용될 수 있는 선언 컨텍스트와 타입 컨텍스트는 JLS 9.6.4.1에 명시되며, 소스 코드에서는 java.lang.annotation.ElementType의 열거 상수로 나타냅니다.

출처: Java API Reference

본문

애너테이션 인터페이스 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 배열입니다.

더 알아보기 (Learn more)