Annotation Processor 완전 정복: KAPT vs KSP 한눈에 알아보기
2025. 3. 11. 17:22ㆍ개발새발 안드로그
728x90
반응형
1. Annotation Processor
컴파일 시 @Annotation을 읽고, 자동으로 필요한 코드를 생성하는 기능이다.
즉, 개발자가 직접 코드를 작성하지 않아도, 특정 Annotation을 붙이면 필요한 코드가 자동으로 생성된다.
✔ 예제
현재는 Kotlin의 DataClass로 인하여 거의 사용하지 않는 Java의 Lombok이 대표적인 예시이다.
@Getter
@Setter
public class User {
private String name;
private int age;
}
컴파일 시, Annotation Processor가 getName(), setAge() 같은 메서드를 자동으로 생성해준다.
✔ Annotation Processor를 사용하는 이유
- 코드 자동 생성 → 중복 코드 제거 & 생산성 향상 (보일러 플레이트 코드)
- 컴파일 타임에 코드 생성 → 실행 지점에서 불필요한 리플렉션 제거
- 자바 & 코틀린에서 공통으로 사용 가능
- Dagger, Room, Glide, Moshi 같은 라이브러리에서 필수적으로 사용됨.
2. KAPT (Kotlin Annotation Processing Tool)
Annotation Processor는 Java가 기반이라 Kotlin을 지원하지 않는다.
따라서 Kotlin에서 Annotation Processor를 사용하려면 KAPT라는 도구를 사용해야 한다.
✔ 예제
Room ORM을 사용한다고 가정하자.
- @Entity, @Dao, @Database 같음 Annotation을 사용하여 자동으로 코드를 생성한다.
- 근데 Room의 내부 처리는 Java 기반 Annotation Processor로 동작한다.
- Kotlin에서는 사용이 불가하므로 KAPT가 중간에서 변환하여 실행시켜준다.
✔ KAPT의 단점
하지만 KAPT의 한계는 존재한다.
- 속도가 느림 → Kotlin 코드를 Java 코드로 변환하는 과정이 필요해서 전체적인 빌드 속도가 느려짐.
- 메모리 사용량이 많음 → Annotation Processing 자체가 무거운 작업이라 빌드 성능에 영향
- Null-Safety 부족 → Kotlin의 null-safety 기능을 100% 활용하지 못함
위와 같은 한계점 때문에 최근엔 KSP로 대체가 되고 있다.
3. KSP (Kotlin Symbol Processing)
KSP는 Kotlin에서 컴파일 타임에 코드를 분석하고 새로운 코드를 생성할 수 있도록 도와주는 프로세싱 도구이다.
애초에 KAPT는 JAVA 기반 Annotation Processing을 위한거라면, KSP는 온전히 Kotlin만을 위해 탄생한 도구이다.
즉, 기존의 KAPT보다 더 가볍고 빠르게 동작한다.
또한 Dagger, Room, Glide, Moshi 같은 라이브러리에서도 KSP를 지원한다.
굳이 JAVA의 변환 과정이 없기에 빌드 속도가 최적화 되고 메모리 절감 효과가 있다.
무조건 KSP를 쓰는게 이득이다.
728x90
반응형