kapt 대신에 ksp 사용해보기

Goodbye kapt, Hello KSP(Kotlin Symbol Processing)!

kapt는 지금까지 코틀린에서 어노테이션 프로세서로 많이 이용됐다. 쭉 kapt만을 써오다가, 올해(2021년) 2월달에 ksp라는 새로운 어노테이션 프로세서가 등장했다(첫 등장한 구글 블로그). ksp 공부를 미뤄오다가 오늘 간단히 공부해서 사용 방법을 기록하고자 한다.

기존에는 코틀린 전용 어노테이션 프로세서가 없었기 때문에, 프로세서를 수행하기 위해 kapt는 코틀린 코드를 자바 스텁(Stub)으로 컴파일하게 된다. 이러한 스텁을 생성하려면 kapt가 코틀린 파일의 모든 symbol들을 확인해야 한다. 이러한 과정이 컴파일 시간에 매우 긴 영향을 끼친다. Room 라이브러리로 예시를 들면, ksp를 사용할 때가 kapt를 사용할 때 보다 약 2배 정도 빠르게 컴파일이 됐다.

ksp를 사용하기 위해선 우선 classpath를 추가해 주어야 한다. (프로젝트 단위 그레이들)

classpath("com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:${Versions.Essential.Ksp}")

ksp의 최신 버전은 ksp 깃허브 릴리즈에서 확인할 수 있다.

다음으로 플러그인을 추가해 준다. (모듈 단위 그레이들)

plugins {
...

id("com.google.devtools.ksp")
...
}

마지막으로 kapt에서 ksp로 변경해주면 된다.

ksp(Dependencies.Hilt.Compiler)

IDE에게 ksp로 생성된 파일들을 알려주고 싶을때가 있다. 그럴땐 srcDir를 추가해주면 된다.

kotlin {
sourceSets.main {
kotlin.srcDir("build/generated/ksp/main/kotlin")
}
}

아직 ksp를 지원하는 라이브러리들이 몇개 없는거 같다.

https://github.com/google/ksp#supported-libraries

무조건 ksp를 적용하려고 하지 말고, 우선 지원하는 라이브러리인지 체크하고 적용해 보는걸 추천한다.

iOS 개발자를 꿈꾸는 토스팀 안드로이드 취준생 / github.com/jisungbin

iOS 개발자를 꿈꾸는 토스팀 안드로이드 취준생 / github.com/jisungbin