ssung_항해일지/항해99_실전 프로젝트

실전 프로젝트 - 21일차

ssungcohol 2023. 3. 31. 20:44

Meta Annotation (@Target, @Retention)

로깅과 AOP를 설정할 때 주로 사용되는 @Target과 @Retention에 대해 알아보자!


Meta - Annotation이란?

다른 Annotation에서도 사용되는 Annotation의 경우를 말하고 custon - annotation을 생성할 때 주로 사용한다.

@Service 어노테이션은 Bean으로 등록해주기 위해 @Component를 가지고 있는 형태로써, 여기서는 @Component를

Meta - Annotation이다.

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface ParamToDto {
}

이렇게 사용이 된다.


@Target

 

@Target 은 java compiler가 Annotation이 어디에 적용될지 결정하기 위해 사용한다.

위의 예제에서는 PARAMETER 즉, 전달인자 선언 시 사용한다는 의미이다.

이 외에도 다양한 종류의 타입 선언이 존재

ElementType.PACKAGE // 패키지 선언
ElementType.TYPE // 타입 선언
ElementType.ANNOTATION_TYPE // 어노테이션 타입 선언
ElementType.CONSTRUTOR // 생성자 선언
ElementType.FIELD // 멤버 변수 선언
ElementType.LOCAL_VARIABLE // 지역 변수 선언
ElementType.METHOD // 메소드 선언
ElementType.PARAMETER // 전달인자 선언
ElementType.TYPE_PARAMETER // 전달인자 타입 선언
ElementType.TYPE_USE // 타입 선언

@Retention

 

@Retention은 Annotation이 실제로 적용되고 유지되는 범위를 의미한다.

Policy에 관련된 Annotation으로 컴파일 이후에도 JVM에서 참조가 가능한 RUNTIME으로 지정한다.

종류는 세 가지가 있다.

RetentionPolicy.RUNTIME
RetentionPolicy.CLASS
RetentionPolicy.SOURCE

RUNTIME은 컴파일 이후에도 JVM에 의해서 계속 참조가 가능. 주로 리플렉션이나 로깅에 많이 사용

CLASS는 컴파일러가 클래스를 참조할 때까지 유효

SOURCE는 컴파일 전까지만 유효. 즉, 컴파일 이후에는 사라짐

728x90