1. 메타 에너테이션
- 애너테이션을 위한 애너테이션
애너테이션 | 설명 |
@Target | 애너테이션이 적용가능한 대상을 지정하는데 사용한다. |
@Documented | 애너테이션 정보다 javadoc으로 작성된 문서에 포함되게 한다. |
@Inherited | 애너테이션이 자손 클래스에 상속되도록 한다. |
@Retention | 애너테이션이 유지되는 범위를 지정하는데 사용한다. |
@Repeatable | 애너테이션을 반복해서 적용할 수 있게 한다.(JDK1.8) |
2. @Target
- 애너테이션을 정의할 때, 적용대상 지정에 사용
@Target({FIELD, TYPE, TYPE_USE}) // 적용 대상이 FIELD, TYPE, TYPE_UST
public @interface MyAnnotation { } // MyAnnotation을 정의
@MyAnnotation // 적용 대상이 TYPE인 경우(클래스, 인터페이스)
class MyClass {
@MyAnnotation // 적용 대상이 FIELD인 경우
int i; // 멤버변수 iv
@MyAnnotation // 적용 대상이 TYPE_USE인 경우(참조변수)
MyClass mc;
}
3. @Retention
- 애너테이션이 유지(retention)되는 기간을 지정하는데 사용
유지 정책 | 의미 |
SOURCE | 소스 파일에만 존재. 클래스파일에는 존재하지 않음. |
CLASS | 클래스 파일에 존재. 실행시에 사용불가. 기본값 |
RUNTIME | 클래스 파일에 존재. 실행시에 사용가 |
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {}
4. @Documented, @Inherited
- javadoc으로 작성한 문서에 포함시키려면 @Documented를 붙인다.
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}
@Inherited // @SuperAnno가 자손까지 영향 미치게
@interface SuperAnno {}
@SuperAnno
class Parent {}
class Child extends Parent {} // Child에 애너테이션이 붙은 것으로 인식
5. @Repeatable
- 반복해서 붙일 수 있는 애너테이션을 정의할 때 사용
@Repeatable(ToDos.class) // ToDo애너테이션을 여러 번 반복해서 쓸 수 있게 한다.
@interface ToDo {
String value();
}
// @Repetable이 붙은 애너테이션은 반복해서 붙일 수 있다.
@ToDo("delete test codes.")
@ToDo("override inherited methods")
class MyClass {
...
}
// @Repetable인 @ToDo를 하나로 묶을 컨테이너 애너테이션도 정의해야 함
@interface ToDos { // 여러 개의 ToDo애너테이션을 담을 컨테이너
ToDo[] value(); // 이름이 반드시 value이어야 함
}
'Java' 카테고리의 다른 글
126. 프로세스와 쓰레드 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.06 |
---|---|
125. 애너테이션 타입 정의, 요소 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.06 |
123. 애너테이션 - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.01.06 |
122. 열거형멤버 추가하기 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.03 |
121. 열거형 - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.01.03 |