12-29~33 메타 애너테이션

oyeon·2020년 12월 29일
0

Java 개념

목록 보기
48/70
  • '애너테이션을 위한 애너테이션'
  • java.lang.annotation 패키지에 포함

@Target

  • 애너테이션을 정의할 때, 적용대상 지정에 사용
@Target({FIELD, TYPE, TYPE_USE})	// 적용대상이 FIELD, TYPE, TYPE_USE
public @interface MyAnnotation { }	// MyAnnotation을 정의

@MyAnnotation	// 적용대상이 TYPE인 경우
class MyClass{
    @MyAnnotation	// 적용대상이 FIELD인 경우
    int i;
    
    @MyAnnotation	// 적용대상이 TYPE_USE인 경우
    MyClass mc;
}

@Retention

  • 애너테이션이 유지(retention)되는 기간을 지정하는데 사용
  • 컴파일러에 의해 사용되는 애너테이션의 유지 정책은 SOURCE 이다.
@Target(ElementType.METHOD)
// @Override - 컴파일러가 오버라이딩 제대로 했는 체크할 때 사용
// -> 실행시 불필요 하므로 클래스 파일에 남아있을 필요 없다. SOURCE 유지정책 사용
@Retention(RetentionPolicy.SOURCE)
public @interface Override { }
  • 실행시에 사용 가능한 애너테이션의 정책은 RUNTIME 이다.
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface { }

@Documented, @Inherited

  • javadoc으로 작성한 문서에 포함시키려면 @Documented를 붙인다.
  • 애너테이션을 자손 클래스에 상속하고자 할 때, @Inherited를 붙인다.

@Repeatable

  • 반복해서 붙일 수 있는 애너테이션을 정의할 때 사용
  • @Repeatable이 붙은 애너테이션은 반복해서 붙일 수 있다.
  • @Repeatable인 @ToDo를 하나로 묶을 컨테이너 애너테이션도 정의해야 함
profile
Enjoy to study

0개의 댓글