AndroidDeepDive / Study

100 stars 2 forks source link

[005] Kotlin Symbol Processing API #48

Closed Charlezz closed 3 years ago

Charlezz commented 3 years ago

주제 선정 배경

다음과 같은 의식의 흐름을 따라 선정. [업무량을 또는 업무 시간을 줄이고 싶다 -> 프로젝트의 빌드 속도를 빠르게 해볼까? -> KSP발견]

KSP와 어노테이션 프로세싱을 통해 업무를 자동화 할 수 있는 스킬을 기르고 싶은 '욕구'가 생겼다.

우리는 프로젝트에서 이미 Dagger, Glide, DataBinding , Parcelize 등을 적용하고 있다. 이 라이브러리들의 Java 어노테이션 프로세서를 코틀린에서 올바르게 동작시키기 위해 KAPT를 사용한다. 하지만 KAPT는 Java Stub을 생성하기 오버헤드가 발생하고, KSP로 전환하면 컴파일러에 소요되는 시간이 25%가 단축된다고 한다.

현재 실험적으로 Room 과 Moshi가 KSP를 지원하고 있다.

공식 문서 내용에 따르면 Tachiyomi 프로젝트에서 총 코틀린 컴파일 시간은 21.55초가 소요될 때 KAPT가 코드를 생성하는데 8.67초가 걸렸고 KSP는 1.15초가 걸렸다고 한다.

오픈소스 라이브러리 이외에도 몇가지 목적을 가지고 실무에서 custom annotation proceesor를 만들어서 사용하고 있다.

참고 자료

https://developers-kr.googleblog.com/2021/02/announcing-kotlin-symbol-processing-ksp.html https://github.com/google/ksp

SODA1127 commented 3 years ago

https://soda1127.github.io/introduce-kotlin-symbol-processing/