@Retention 간략 설명
소스 작업 중 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
보면 이해가 되는데 설명은 안되는거 보면 정확하게 이해를 못한거 같습니다.
대충 이해한 내용은 .jar같은 배포 소스의 경우 java소스가 없기 때문에 배포 후 체크해야 하는 사항의 경우 class로
설정 한다고 합니다. class가 올라오면서 행위가 이루어 져야 하는 경우(이런 경우는 뭘까...)도 포함 된다고 하네요