2020. 9. 26. 11:35ㆍ개인공부/java
메타 애너테이션
- 메타 애너테이션은 '애너테이션을 위한 애너테이션'
- 메타 애너테이션은 java.lang.annotation 패키지에 포함
@Target
-애너테이션을 정의할 때, 적용대상 지정에 사용
@Target({FIELD, TYPE, TYPE_USE})
@interface MyAnnotation {} // 애너테이션을 정의
@Retention
-애너테이션이 유지(retention)이 되는 기간을 지정하는데 사용
class는 잘 안씀.
-컴파일러에 의해 사용되는 애너테이션의 유지 정책은 SOURCE이다.
@Target(ElementType.MEHOTD)
@Retention(RetentionPolicy.SOURCE) // 컴파일러가 읽어낸다음은 필요가 없기때문에 클래스파일에서 빠진다. 소스 파일에만 존재함.
public @interface Override{}
-실행시에 사용 가능한 애너테이션의 정책은 RUNTIME이다.
@Documented
@Retention(RetentionPolicy.RUNTIME) // Runtime까지, 클래스 파일에 존재한다. 실행시에 사용가능함
@Target(ElementType.TYPE)
public @interface FunctionalInterface{}
@Documented
-javadoc으로 작성한 문서에 포함시키려면 @Documented를 붙인다.
@Inherited
-애너테이션을 자손 클래스에 상속하고자 할 때, @Inherited를 붙인다.
@ Inherited //상속
@interface SuperAnno{} // @SuperAnno가 자손까지 영향 미치게함.
@SuperAnno
class parent{}
Class Child extends Parent{} // Child에 애너테이션이 붙은 것으로 인식함.
@Repeatable
- 반복해서 붙일 수 있는 애너테이션을 정의할 때 사용
@Repeatable(Todos.class) // ToDo애너테이션을 여러 번 반복해서 쓸 수 있게 한다.
@interface ToDo{
String value();
}
-@Repeatable이 붙은 애너테이션은 반복해서 붙일 수 있다.
@ToDo("delete test codes.")
@ToDo("override inherited methods")
class MyClass{
.....
}
-@Repeatalbe인 @ToDo를 하나로 묶을 컨테이너 애너테이션도 정의해야 함.
@interface ToDos{ // 여러개의 ToDo 애너테이션을 담을 컨테이너 애너테이션 ToDos
ToDo[] value(); // ToDo 애너테이션 배열타입의 요소를 선언. 이름이 반드시 value 이어야함
}
출저 : 자바의 정석 - 남궁성 저자님.
'개인공부 > java' 카테고리의 다른 글
JAVA - stream (0) | 2020.09.27 |
---|---|
JAVA - 함수형 인터페이스 (0) | 2020.09.26 |
JAVA - 표준 애너테이션 (0) | 2020.09.26 |
JAVA -애너테이션 (0) | 2020.09.25 |
자바 지네릭스 - 2020.07.24 (0) | 2020.07.25 |