자바에서 메타 애너테이션은 애너테이션을 정의할 때 사용되는 애너테이션으로, 애너테이션을 어떻게 사용해야 하는지를 나타냅니다. 메타 애너테이션은 컴파일러에게 애너테이션을 어떻게 처리해야 하는지 지시하고, 런타임에 리플렉션을 통해 애너테이션 정보를 읽을 수 있도록 합니다. 다음은 몇 가지 주요한 메타 애너테이션입니다.
1. @Retention
- 목적 : 애너테이션의 유지 정책을 지정합니다. 즉, 애너테이션 정보를 언제까지 유지할 것인지를 나타냅니다.
- 옵션 :
-- RetentionPolicy.SOURCE : 소스 코드까지만 유지. 컴파일 이후 사라짐.
-- RetentionPolicy.CLASS : 클래스 파일까지 유지. 런타임 시에는 사라짐 (기본값).
-- RetentionPolicy.RUNTIME : 런타임까지 유지.
- 사용 예시 :
@Retention(RetentionPolicy.RUNTIME)
public @interface MyRuntimeAnnotation {
// 애너테이션 내용
}
2. @Target
- 목적 : 애너테이션을 어디에 적용할 수 있는지를 지정합니다. 즉, 애너테이션을 사용할 수 있는 대상을 나타냅니다 (클래스, 메서드, 필드 등).
- 옵션:
-- ElementType.TYPE : 클래스, 인터페이스, Enum 등.
-- ElementType.FIELD : 필드.
-- ElementType.METHOD : 메서드.
-- ElementType.PARAMETER : 매개변수.
등등 다양한 대상이 있습니다.
- 사용 예시 :
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface MyTargetAnnotation {
// 애너테이션 내용
}
3. @Documented
- 목적 : 해당 애너테이션을 Javadoc에 포함시킬지 여부를 나타냅니다.
- 사용 예시 :
@Documented
public @interface MyDocumentedAnnotation {
// 애너테이션 내용
}
4. @Inherited
- 목적 : 해당 애너테이션을 부모 클래스에서 자식 클래스로 상속할지 여부를 나타냅니다.
- 사용 예시 :
@Inherited
public @interface MyInheritedAnnotation {
// 애너테이션 내용
}
5. @Repeatable
- 목적 : Java 8부터 도입된 애너테이션으로, 같은 타입의 애너테이션을 반복해서 사용할 수 있게 합니다.
- 사용 예시 :
@Repeatable(MyContainerAnnotation.class)
public @interface MyRepeatableAnnotation {
// 애너테이션 내용
}
public @interface MyContainerAnnotation {
MyRepeatableAnnotation[] value();
}
6. @Native
- 목적 : 해당 애너테이션을 네이티브 코드에 매핑하는 데 사용됩니다.
- 사용 예시 :
@Native
public @interface MyNativeAnnotation {
// 애너테이션 내용
}
이러한 메타 애너테이션들은 애너테이션을 정의할 때 유용하게 활용되며, 이를 통해 애너테이션의 사용 방법과 처리 방법을 명시적으로 제어할 수 있습니다.
With ChatGPT
'JAVA > 포스팅' 카테고리의 다른 글
자바 쓰레드(Thread) (0) | 2023.11.21 |
---|---|
자바 애너테이션 타입 정의하기 (0) | 2023.11.21 |
자바 표준 애너테이션 (0) | 2023.11.21 |
자바 애너테이션 (0) | 2023.11.21 |
자바 열거형의 이해 (0) | 2023.11.20 |