Hilt KSP로 교체하기

안드로이드를 개발하다보면, KSP(Kotlin Symbol Processing) 키워드와 KAPT(Kotlin Annotation Processing Tool)에 대해서 들어본적 있으실겁니다.

KAPT? KSP?

코틀린은 자체적으로 어노테이션 프로세싱을 지원하지 않습니다.
문제는 코틀린 프로젝트가 컴파일을 하면 javac이 아닌 kotlinc로 컴파일이 되기 때문에 자바 어노테이션 프로세서를 그냥 사용할수가 없었습니다.
그래서 Kapt를 이용해 Stub을 만들고 작동을 하게끔 만든다고 하는데요.
문서에서는 Stub 비용이 크다고 적혀 있습니다.


https://developer.android.com/studio/build/migrate-to-ksp?hl=ko

KSP(Kotlin Symbol Processing)는 이러한 비용을 줄일수 있습니다.

성능 평가를 위해 KSP에 단순화된 Glide 버전 을 구현하여 Tachiyomi 프로젝트 용 코드를 생성했습니다 . 테스트 장치에서 프로젝트의 총 Kotlin 컴파일 시간은 21.55초인 반면, kapt가 코드를 생성하는 데 8.67초가 걸렸고, KSP 구현에서 코드를 생성하는 데 1.15초가 걸렸습니다.
https://kotlinlang.org/docs/ksp-why-ksp.html#limitations

KSP 지원

현재 안드로이드에서 Kapt로 남아있는 것은 대부분 Hilt일 것입니다.
Kapt가 하나라도 남아있는 이상 성능개선은 미미하다고 문서에서는 얘기를 하는데요.

최근에 Hilt 개선 작업이 시작이 되었습니다.

https://kotlinlang.org/docs/ksp-overview.html#supported-libraries

Hilt 적용해보기

적용은 단순합니다.
kapt를 ksp로만 바꾸면 됩니다.
하지만 kotlin 버전에 따라 ksp버전도 올려줘야 하는점 kapt와 ksp가 hilt를 동시에 선언하고 있다면 중복 에러로 인해 컴파일 에러가 터진다는 것을 유의합시다.

후기

이제 프로젝트에서 kapt를 사용하지 않아도 된다니... 참 시간이 빠르군요.
kapt는 역사의 뒤안길로..
오늘도 읽어주셔서 감사합니다!

참고

향상된 주석 처리: kapt에서 스텁 지원

KAPT보다 2배 더 빠르게, 코틀린을 위한 KSP

Dagger Migration

profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글