<aside> 📌 1. 각 어노테이션 파헤쳐 보기 ex) Auth, @IpAddress 등
2. 테스트 때마다 DB 초기화가 이뤄지는 원리는?
</aside>
@interface
Annotation(사용자 지정 어노테이션)@Target
은 Java compiler가 annotation이 어디에 적용될지 결정하기 위해 사용한다.
종류는 아래와 같다.
ElementType.PACKAGE : 패키지 선언
ElementType.TYPE : 타입 선언
ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언
ElementType.CONSTRUCTOR : 생성자 선언
ElementType.FIELD : 멤버 변수 선언
ElementType.LOCAL_VARIABLE : 지역 변수 선언
ElementType.METHOD : 메서드 선언
ElementType.PARAMETER : 전달인자 선언
ElementType.TYPE_PARAMETER : 전달인자 타입 선언
ElementType.TYPE_USE : 타입 선언
@Retention
은 Annotation이 실제로 적용되고 유지되는 범위를 의미한다.
Policy에 관련된 Annotation으로 컴파일 이후에도 JVM 에서 참조가 가능한 RUNTIME으로 지정한다.
종류는 다음과 같다.
RetentionPolicy.RUNTIME
RetentionPolicy.CLASS
RetentionPolicy.SOURCE
RUNTIME
: 컴파일 이후에도 JVM 에 의해서 계속 참조가 가능합니다. 주로 리플렉션이나 로깅에 많이 사용된다.CLASS
: 컴파일러가 클래스를 참조할 때가지 유효하다.SOURCE
: 컴파일 전까지만 유효합니다. 즉, 컴파일 이후에는 사라지게 된다.