- KSP ( Kotlin Symbol Processing API )
- 기존 Java의 kapt 대응
- kapt 대비 2배 빠른 속도
- 장점 → code generate를 도와줌 / 단점 → rebuild가 꼭 필요함
- google open source project
- KSP 버전 정보
- KSP 어디서 쓰나 ?
- Room / Moshi을 쓴다면 내부적으로 활용되고 있는것
- 대거나 많은 라이브러리도 지원 예정에 있음
- 어떤 코드를 KSP로 만들수 있나 ?
- 자동으로 코드를 생산해서 개발 속도를 빠르게 할 수 있는 경우에는 다 활용 가능
- 보통 익스텐션 함수를 활용하지만, KSP를 활용하면 익스텐션 함수보다 성능적으로 뛰어날 수 있음
- 자동화하면 관리는 누가 해야하나 ?
- CPU에게 일을 시키거나, 개발자가 일을 더하거나 둘 중 하나
- 남에게 시켜보다 → Room / Moshi 등에서 자동으로 만들어줌
- Room에서
@Query
어노테이션 참조
- 사용 예시
- 예시 코드의 Compose
@ProvidedCompseLocal
참조
- compose에서 같은 뷰모델을 바라볼 수 있도록 개발 할 것이라 가정
- 위 개발을 KSP를 활용하여 코드 자동생성 가능
- 예시 코드에선 viewModel 변수이름이 중복되지 않도록 하는것이 좋음
- 작업 순서
- KSP 모듈 추가
- gradle에 추가
- KSP를 Square - kotlinpoet 라이브러리와 함께 활용하는 경우도 많음
- SymbolProccessorProvidor / SymbolProccessor 인터페이스를 한번 알아볼것
- logger로 디버깅을 대부분 진행하고 있음
- 초기화 코드 작성
- Target 할 Annotation 정의
- 테스트 가능한 환경을 구축
- 사용할 모듈에 build.gradle 적용하고, Annotation 정의
- Annotation 찾고
- 빌드 시에, 빌드 콘솔에서 제대로 빌드되었는지 확인을 해볼 수 있음
- 생성할 코드 정의
- 예외 처리
- JVM 기반으로 작성하는거라, 안드로이드 라이브러리를 string 형태로 직접 언급해주고 갖고와야함
- import 등의 코드 추가도 직접 코딩 해주어야 함
- 동적으로 클래스 명 ( 예제에서는 Activity 명 )을 받을 수 있음
- super 타입을 가져올 수 있기 때문에, 부모 타입을 가지고 여러 작업도 진행 해줄 수 있음
- KSP 사용 Tip
- 생성자 정보도 가져올 수 있음
- 실제 클래스가 위치하는지도 알 수 있음
- Visitor는 언제 쓰나요 ?
- Dagger 모듈 만들기 귀찮을 때 KSP를 활용했었음