on
어노테이션 프로세서
어노테이션 프로세서
어노테이션 프로세서는 javac 빌드 툴의 일종으로 컴파일 타임에 클래스, 메서드, 파라미터에 메타 정보를 라벨링 하는 태그 메커니즘입니다. javac는 크게 두 가지로 구분됩니다. 하나는 컴파일러이고, 다른 하나는 컴파일러를 지원하는 환경입니다.
컴파일러 환경은 세가지 API를 제공하고 있습니다.
Language Model API (javax.lang.model package)
Annotation Processing API (javax.annotation.processing package)
Compiler Tree API (com.sun.source package)
컴파일러는 Java Compiler API를 제공합니다.
Java Compiler API (javax.tools package)
컴파일 과정에서 컴파일러는 AST를 생성하게 되며 "javac-processor"에 등록된 AnnotationProcessor를 호출하게 됩니다.
AnnotationProcessor에서는 컴파일러에서 제공된 Syntax Tree를 이용하거나 직접 Visitor를 구현해 트리를 탐색해 바이트 코드 분석 및 생성 작업을 하게 됩니다. 최종적으로 javac는 어노테이션 프로세서에 의해 수정된 AST기반으로 바이트 코드를 생성하게 됩니다.
모든 어노테이션 프로세서는 AbstractProcessor 추상 클래스를 상속받아야 합니다. AbstractProcessor 내 다양한 메서드들을 오버 라이딩할 수 있지만 프로세싱을 처리하는 process는 추상 메서드로 구현되어 있어 이 메서드에 비즈니스 로직을 작성하면 됩니다.
AST 추상 구문 트리 (Abstract Syntax Tree)
추상이라는 말은 실제 구문에서 나타나는 모든 세세한 정보를 나타내지 않음을 의미합니다. 주로 컴파일러에서 사용되는 자료구조로 Abstract Syntax 구조를 표현하기 위해 사용됩니다. Abstract Syntax란 프로그래밍 언어의 문법 및 각 문단의 역할을 표현하기 위한 규칙입니다. 프로그래밍 언어의 사용의 틀린 부분이 없는지, 문맥적인 소스코드 검사의 단계를 위해 사용됩니다.
from http://jinukix.tistory.com/50 by ccl(A) rewrite - 2021-10-17 14:01:52