🌱 오늘의 주제 : 메타 애너테이션이란?
🌱 메타 애너테이션이란?
- 메타 애너테이션은 에너테이션을 위한 에너테이션이다. 즉, 에너테이션에 붙이는 에너테이션으로 적용대상이나 유지기간등을 지정하는데 사용된다.
- 메타 에너테이션은 java.lang.annotation패키지에 포함되어 있다.
🌱 @Target
- 애너테이션이 적용가능한 대상일 지정하는데 사용.
- 아래는 @SuppressWarnings를 정의한 것이다. 이 애너테이션에 적용할 수 있는 대상을 @Target으로 지정했다.
@Target ({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
🌱 @Retention
- 애너테이션이 유지되는 기간을 지정하는데 사용된다.
@Target(ElemenType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {}
- 유지정책 class는 컴파일러가 애너테이션의 정보를 클래스 파일에 저장할 수 있게는 하지만, 클래스 파일이 JVM에 로딩될 때는 애너테이션의 정보가 무시되어 실행 시에 애너테이션에 대한 정보를 얻을 수 없다. 이것이 CLASS가 유지정책의 기본값임에도 불구하고 잘 사용되지 않는 이유다.
🌱 @Documented, @Inherited
- @Documented : 애너테이션에 대한 정보가 javadoc으로 작성한 문서에 포함되어 있다. 기본 애너테이션 중 @Override와 @SuppressWarnings를 제외하고는 모두 이 메타 애너테이션이 붙어 있다.
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface FunctionalInterface {}
- @Inherited : 애너테이션이 자손 클래스에 상속되도록 한다. @Inherited가 붙은 애너테이션을 조상 클래스에 붙이면, 자손 클래스도 이 애너테이션을 붙은 것과 같이 인식된다.
@Inherited // @SuperAnno가 자손까지 영향 미치게
@interface SuperAnno {}
@SuperAnno
class Parent {}
class Child extends Parent {} // Child가 애너테이션이 붙은 것으로 인식
🌱 @Repeatable
- 보통은 하나의 대상에 한 종류의 애너테이션을 붙이는데, @Repeatable이 붙은 애너테이션은 여러번 붙일 수 있다.
@Repeatable(ToDos.class) // ToDo애너테이션을 여러번 반복해서 쓸 수 있게 한다.
@interface ToDo {
String value();
}
- 이 애너테이션은 하나로 묶어서 다룰 수 있는 애너테이션도 추가로 정의해야한다.
@interface Todos { // 여러개의 ToDo애너테이션을 담을 컨테이너 애너테이션 ToDos
Todo[] value(); // ToDo애너테이션 배열타입의 요소를 선언. 이름이 반드시 value이어야 함.
}
@Repeatable(ToDos.class) // 괄호 안에 컨테이너 애너테이션을 지정해 줘야한다.
@interface ToDo {
String value();
}
'Java' 카테고리의 다른 글
Java - 쓰레드란? (0) | 2023.03.16 |
---|---|
Java - 에너테이션의 조상, 규칙, 활용 (0) | 2023.03.16 |
Java - 애너테이션이란? (0) | 2023.03.13 |
Java - 열거형(enum) (0) | 2023.03.09 |
Java - 지네릭 메서드와 형변환 (2) | 2023.03.08 |