1) @Target
(1) 사용 예시
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DistributedLock {
...
}
(2) ElementType 종류
public enum ElementType {
/** 클래스, 인터페이스, 열거형 또는 레코드의 선언을 나타냅니다. */
TYPE,
/** 필드 선언을 나타내며, 열거형 상수도 포함됩니다. */
FIELD,
/** 메소드 선언을 나타냅니다. */
METHOD,
/** 형식 매개변수 선언을 나타냅니다. */
PARAMETER,
/** 생성자 선언을 나타냅니다. */
CONSTRUCTOR,
/** 로컬 변수 선언을 나타냅니다. */
LOCAL_VARIABLE,
/** 주석 인터페이스의 선언을 나타냅니다. */
ANNOTATION_TYPE,
/** 패키지 선언을 나타냅니다. */
PACKAGE,
/**
* 형식 매개변수 선언을 나타냅니다.
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* 타입을 사용하는 부분을 나타냅니다.
*
* @since 1.8
*/
TYPE_USE,
/**
* Java 8에 도입된 모듈 선언을 나타냅니다.
*
* @since 9
*/
MODULE,
/**
* Java 14에 도입된 레코드의 선언을 나타냅니다.
*/
RECORD_COMPONENT;
}
2) @Retention
커스텀 애노테이션의 생성에서 해당 애노테이션이 선언된 대상(@Target의 속성값)의 메모리를 언제까지 유지 할 것인지 결정하는 애노테이션입니다.
RetentionPolicy에는 크게 SOURCE, CLASS, RUNTIME 3가지가 존재합니다.
(1) RetentionPolicy.SOURCE
-자바 컴파일러(=javac)가 자바코드를 컴파일 할때,
해당 애노테이션의 메모리를 버림
(2) RetentionPolicy.CLASS
(3) RetentionPolicy.RUNTIME
참고 자료:
(1) [Java] @Retention, @Target에 대하여(https://dev-gyus.github.io/java/2021/03/11/Retention-Target.html)
(2) 아무 관심 없던 @Retention 어노테이션 정리(RetentionPolicy SOURCE vs CLASS vs RUNTIME)
출처: https://jeong-pro.tistory.com/234 기본기를 쌓는 정아마추어 코딩블로그:티스토리