annotation이 선언할 때 @Target이라는 annotation이 있다.
@Target annotation은 사용자가 만든 annotion이 부착될 수 있는 타입을 지정하는 것이다.
밑에 사진은 Target annotation을 구현한 부분이다.
value에는 ElementType이라는 Enum객체를 사용한다.
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
구현 코드를 보면 위에 ANNOTATION_TYPE이 들어간다. 그래서 Target이라는 annotation은 annotation에만 부착될 수 있다.
타겟이 들어 갈 수 있는 내용은 밑에 표를 보면 알 수 있다.
value | |
---|---|
ANNOTATION_TYPE | 어노테이션 |
CONSTRUCTOR | 생성자 |
FIELD | 필드 선언 (emum 정수 포함) |
LOCAL_VARIABLE | 로컬 변수 |
METHOD | 메서드 |
PARAMETER | 파라미터 |
PACKAGE | 패키지 |
TYPE | 클래스, 인터페이스 (어노테이션을 포함), enum |
예시를 든 Annotation이다 TestAnnotation에 Target annotation을 붙혀 위에 표와같이 METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE에서 사용할 수 있게 만들었다.
밑에는 TestAnnotaion을 사용하여 만든 코드이다
이와같이 Class Field Method Constructor Annotation에 TestAnnotation을 붙힐 수 있는 것을 알 수 있었다.