- 애노테이션을 정의하는데 사용하는 특별한 애노테이션을 메타 애노테이션이라 한다.
- @Retention
- RetentionPolicy.SOURCE
- RetentionPolicy.CLASS
- RetentionPolicy.RUNTIME
- @Target
- @Documented
- @Inherited
@Retention
- 애노테이션의 생존 기간을 지정한다.
- RetentionPolicy.SOURCE : 소스 코드에만 남아있다. 컴파일 시점에 제거된다.
- RetentionPolicy.CLASS : 컴파일 후 class 파일까지는 남아있지만 자바 실행 시점에 제거된다. (기본 값)
- RetentionPolicy.RUNTIME : 자바 실행 중에도 남아있다. 대부분 이 설정을 사용한다.
@Target
- 애노테이션을 적용할 수 있는 위치를 지정한다.
- 이름만으로 충분히 이해가 될 것이다. 주로 TYPE , FIELD , METHOD 를 사용한다.
@Documented
- 자바 API 문서를 만들 때 해당 애노테이션이 함께 포함되는지 지정한다. 보통 함께 사용한다.
@Inherited
- 적용 예시
package annotation.basic;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
public @interface AnnoMeta {
}
package annotation.basic;
@AnnoMeta // 타입에 적용
public class MetaData {
//@AnnoMeta // 필드에 적용 - 컴파일 오류
private String id;
@AnnoMeta // 메서드에 적용
public void call() {
}
public static void main(String[] args) throws NoSuchMethodException {
AnnoMeta typeAnno = MetaData.class.getAnnotation(AnnoMeta.class);
System.out.println("typeAnno = " + typeAnno);
AnnoMeta methodAnno = MetaData.class.getMethod("call").getAnnotation(AnnoMeta.class);
System.out.println("methodAnno = " + methodAnno);
}
}
'개발이 좋아서 > Java가 좋아서' 카테고리의 다른 글
애노테이션 - 애노테이션 검증기 (0) | 2024.12.01 |
---|---|
애노테이션 - 애노테이션과 상속 (0) | 2024.12.01 |
애노테이션 - 애노테이션 정의 (0) | 2024.12.01 |
리플렉션 - 생성자 탐색과 객체 생성 (0) | 2024.12.01 |
리플렉션 - 활용 예제 (0) | 2024.12.01 |