메타 애너테이션

0

메타애너테이션

: 애너테이션을 위한 애너테이션
: java.lang.annotation 패키지에 포함

1. @Target

  • 애너테이션을 정의할 때, 적용대상 지정에 사용

2. @Retention

  • 애너테이션이 유지(retention)되는 기간을 지정하는데 사용
    • SOURCE, RUNTIME을 자주 씀
  • 컴파일러에 의해 사용되는 애너테이션의 유지정책은 SOURCE이다.
@Target(ElementType.METHOD)
@Retention(RetiontionPolicy.SOURCE) 
public @interface Override {} // 컴파일러를 위해 오버라이딩 제대로 했는지 체크하는 애너테이션(Override).
// 이기 때문에 컴파일러까지만 존재하면 됨, 그 후는 사라짐
  • 실행시에 사용가능한 애너테이션 정책은 RUNTIME 이다.
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}

3. @Documented, @Inherited

  • javadoc으로 작성한 문서에 포함시키려면 @Documented를 붙인다.
  • 애너테이션을 자손클래스에 상속하고자 할 때 @Inherited를 붙인다.
    -> 두개는 많이 사용하지 않는다.

4. @Repeatable

  • 반복해서 붙일 수 있는 애너테이션을 정의할 때 사용
@Repeatable(TODOs.class) // ToDo 애너테이션을 여러번 반복해서 쓸 수 있게 한다.
@interface ToDo {
	String value();
}
  • @Repeatable이 붙은 애너테이션은 반복해서 붙일 수 있다.
@ToDo("delete test codes.")
@ToDo("override inherited methods")
class MyClass {
}
  • @Repeatable인 @ToDo를 하나로 묶을 컨테이너 애너테이션도 정의해야 함
@interface ToDos {  // 여러개의 ToDo애너테이션을 담을 컨테이너 애너테이션 ToDos
	ToDo[] value(); // ToDo 애너테이션 배열타입의 요소를 선언. 이름이 반드시 value이어야 함
}

-> 많이 사용 x

profile
백엔드를 공부하고 있습니다.

0개의 댓글