티스토리 뷰
Java annotationProcessor
annotation processor는 Java에서 주석(annotation)을 처리하기 위한 툴이다.
자바 컴파일러 플러그인의 일종으로, 컴파일 타임에 어노테이션에 대한 코드베이스를 검사, 수정, 생성하는 역할을 한다.
즉, 어노테이션을 사용하기 위해서는 어노테이션 프로세서가 필요하다.
Annotation Processor를 사용하는 과정
1. 사용자는 코드 내에서 주석(annotations)을 사용한다. 이후 사용자는 자바 컴파일러(javac)로 코드를 컴파일하게 된다.
2. 구현: 컴파일러는 소스 코드 내의 어노테이션과 그에 해당하는 어노테이션 프로세서를 찾아 매칭한다. 이를 통해 해당 어노테이션을 처리할 수 있는 어노테이션 프로세서를 실행하게 된다.
주로 javax.annotation.processing.AbstractProcessor 클래스를 상속받아 구현한다.
3. 등록: 어노테이션 프로세서를 등록한다.
META-INF/services/javax.annotation.processing.Processor 파일에 프로세서의 완전한 클래스 이름을 추가한다.
4. 적용: 사용자 정의 어노테이션을 소스 코드에 적용한다.
5. 컴파일: 컴파일러는 모든 어노테이션이 적절히 처리되었는지 확인한다. 만약 처리되지 않은 어노테이션이 있거나, 어노테이션 프로세서의 실행 중 새로운 어노테이션이 코드에 추가되었다면, 해당 어노테이션들을 처리하기 위해 어노테이션 프로세서의 실행을 반복한다.
컴파일러가 어노테이션 프로세서를 실행하면, 프로세서는 소스 코드에 적용된 주석을 처리한다.
Kotlin KAPT (Kotlin Annotation Processing Tool)
Kotlin에서 annotation 처리를 위해서 KAPT(Kotlin Annotation Processing Tool)을 제공한다.
Java에서의 Annotation Processors와 유사한 기능을 제공하지만, Kotlin은 kotlinc로 컴파일되기 때문에 기존에 Java로 작성된 Annotation Process로는 Kotlin의 Annotation이 제대로 처리되지 않는다.
따라서 Kotlin 프로젝트에서 특정 라이브러리나 도구가 컴파일 타임 어노테이션 프로세싱을 필요로 할 경우 kapt를 사용해야 한다.
예를 들면, spring-boot-configuration-processor는 컴파일 타임에 @ConfigurationProperties 어노테이션을 처리하여 메타데이터 파일을 생성한다.
'language > java' 카테고리의 다른 글
Static 메서드를 사용하는 이유 (2) | 2024.11.14 |
---|---|
일급 컬렉션을 사용하는 이유 (불변 객체, 방어적 복사) (1) | 2024.11.13 |
Java 8 Stream : map 함수 (0) | 2023.04.18 |
정적 팩토리 메서드 (Static Factory Method) 사용하기 (2) | 2023.04.05 |
인터페이스란? 추상클래스와 인터페이스의 차이점은? (0) | 2021.07.23 |
- Total
- Today
- Yesterday
- Linux
- n+1
- MultipleBagFetchException
- spring boot 3
- redisson 분산락
- addFilterBefore
- checkout
- 스프링 스케줄링
- ChatGPT
- junit5
- Git
- 티스토리챌린지
- 배열
- jvm warm-up 전략
- Spring Security
- 추상클래스
- Kotlin
- JPA
- MongoDB
- array
- FetchJoin
- bucket4j
- 스프링오류
- 자바 어플리케이션 실행 과정
- dto 클래스 생성자
- 오블완
- port
- QueryDSL
- Java
- Cannot construct instance of
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |