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