@Retention 간략 설명

JAVA 2022. 2. 14. 14:38

소스 작업 중 validation을 추가 하기 위해 작업 하다 어노테이션 상단의 @Retention 을 보고 정리한 내용 입니다.

작업 중 어노테이션을 추가 해야 하는 경우가 많은건 아니겠지만 알아 두면 좋은 내용으로 생각 되어 정리 합니다.

 

@Retention 어노테이션은 생명주기를 정의 합니다.

 

SOURCE, CLASS, RUNTIME 3가지로 나누어 지며 이중 가능 이해하기 쉬운 2가지인 SOURCE, RUNTIME의 경우

 

SOURCE = .JAVA소스 작업시에만 해당 어노테이션 확인이 가능 합니다. java->class파일로 변환시 어노테이션은 삭제되고 실제 동작하는 소스로 변경 되게 됩니다. lombok의 @getter, @setter 등이 해당 합니다.

class파일로 변경 되며 getter, setter 어노테이션은 실제 get(), set()메소드로 치환되고 사라지게 됩니다.

 

RUNTIME = 서비스중, 서버기동 중에도 해당 어노테이션이 유지 됩니다. @Controller, @Service, @Autowired같은 어노테이션은 서버 기동중 확인이 필요한 정보들로 유지 되어야 하기 때문에 RUNTIME으로 설정을 하게 되고 

제가 작업한 validation 어노테이션 역시 해당 설정으로 작업 했습니다.

 

CLASS 의 경우(@notnull이 해당합니다.) 한 블로그 댓글에 친절하게 설명이 되어 있어 링크를 걸어 놓습니다.

https://jeong-pro.tistory.com/234

 

아무 관심 없던 @Retention 어노테이션 정리(RetentionPolicy SOURCE vs CLASS vs RUNTIME)

@Retention annotation 관심 갖게 된 이유 자바에서 지향하는 방법은 아니지만 필요에 의해서 커스텀 애노테이션(Annotation)을 만들어야 할 때가 있습니다. 보통 예제 샘플 코드를 보면 메타 애노테이션

jeong-pro.tistory.com

보면 이해가 되는데 설명은 안되는거 보면 정확하게 이해를 못한거 같습니다.

대충 이해한 내용은 .jar같은 배포 소스의 경우 java소스가 없기 때문에 배포 후 체크해야 하는 사항의 경우 class로

설정 한다고 합니다. class가 올라오면서 행위가 이루어 져야 하는 경우(이런 경우는 뭘까...)도 포함 된다고 하네요

 

반응형
Posted by 질주하는구
,