자바에서는 어노테이션 프로세서라는 기능이 제공된다.
컴파일 시점에 특정 어노테이션에 대한 처리를 설정해줄 수 있는 기능인데,
우리가 자주 사용하는 어노테이션 프로세서의 대표 예시로는 Lombok이 있다.
Lombok프로젝트에는 @Getter, @Setter와 같이 실무에서 자주 사용하는 어노테이션에 대한 처리가 구현되어있는데,
롬복 의존을 까보면 내부적으로 우리가 자주 사용되는 Getter어노테이션이 정의되어 있고
@SupportedAnnotationTypes("com.어쩌구.Getter")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class GetterProcessor extends AbstractProcessor {
@Override
public return값 process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
구현
}
}
직접 프로세서를 찾지 못했지만,, 대충 이런 식으로 구현되어있지 않을까 생각하며 직접 작성해보았다.
아무튼 해당 어노테이션에 대한 처리를 담당하는 어노테이션 프로세서가 구현되어 있어서
컴파일 시점, 컴파일러가 annotation을 읽어들인 뒤 해당 어노테이션을 담당하는 프로세서를 찾아 이후의 처리를 위임하는 식으로 동작하게 된다.
그래서 컴파일이 완료된 바이트코드 파일을 보면 @Getter어노테이션은 사라져있고 대신 Class내에 get메소드가 정의되어 있게 된다.