본문으로 건너뛰기

KSP FAQ

KSP를 사용하는 이유

KSP는 kapt에 비해 여러 가지 장점이 있습니다.

  • 더 빠릅니다.
  • Kotlin 사용자에게 API가 더 유연합니다.
  • 생성된 Kotlin 소스에 대해 다중 라운드 처리를 지원합니다.
  • 멀티 플랫폼 호환성을 염두에 두고 설계되고 있습니다.

KSP가 kapt보다 빠른 이유는 무엇인가요?

kapt는 Java 스텁을 생성하기 위해 모든 타입 참조를 구문 분석하고 확인해야 하지만, KSP는 필요에 따라 참조를 확인합니다. javac에 위임하는 데도 시간이 걸립니다.

또한 KSP의 점진적 처리 모델은 단순한 분리 및 집계보다 더 세분화되어 있습니다. 따라서 모든 것을 다시 처리하지 않아도 되는 기회를 더 많이 찾습니다. 또한 KSP는 심볼 확인을 동적으로 추적하기 때문에 파일 변경이 다른 파일을 오염시킬 가능성이 적어 다시 처리해야 하는 파일 집합이 더 작습니다. kapt는 처리를 javac에 위임하기 때문에 이는 불가능합니다.

KSP는 Kotlin 전용인가요?

KSP는 Java 소스도 처리할 수 있습니다. API가 통합되어 있어 Java 클래스와 Kotlin 클래스를 구문 분석할 때 KSP에서 통합된 데이터 구조를 얻을 수 있습니다.

KSP를 업그레이드하는 방법

KSP는 API와 구현을 가지고 있습니다. API는 거의 변경되지 않으며 이전 버전과 호환됩니다. 새로운 인터페이스가 있을 수 있지만 기존 인터페이스는 변경되지 않습니다. 구현은 특정 컴파일러 버전에 연결되어 있습니다. 새 릴리스에서는 지원되는 컴파일러 버전이 변경될 수 있습니다.

프로세서는 API에만 의존하므로 컴파일러 버전에 연결되어 있지 않습니다. 그러나 프로세서 사용자는 프로젝트에서 컴파일러 버전을 올릴 때 KSP 버전도 올려야 합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다.

ksp-a.b.c is too old for kotlin-x.y.z. Please upgrade ksp or downgrade kotlin-gradle-plugin
노트

프로세서 사용자는 프로세서가 API에만 의존하기 때문에 프로세서 버전을 올릴 필요가 없습니다.

예를 들어 일부 프로세서가 릴리스되어 KSP 1.0.1로 테스트되었으며, 이는 Kotlin 1.6.0에만 의존합니다. Kotlin 1.6.20에서 작동하도록 하려면 KSP를 Kotlin 1.6.20용으로 빌드된 버전(예: KSP 1.1.0)으로 올리기만 하면 됩니다.

이전 Kotlin 컴파일러에서 최신 KSP 구현을 사용할 수 있나요?

언어 버전이 동일하면 Kotlin 컴파일러는 이전 버전과 호환되어야 합니다. 대부분의 경우 Kotlin 컴파일러를 올리는 것은 간단해야 합니다. 최신 KSP 구현이 필요한 경우 Kotlin 컴파일러를 적절히 업그레이드하십시오.

KSP는 얼마나 자주 업데이트되나요?

KSP는 가능한 한 Semantic Versioning을 따르려고 노력합니다. KSP 버전 major.minor.patch에서

  • major는 호환되지 않는 API 변경을 위해 예약되어 있습니다. 이에 대한 미리 결정된 일정은 없습니다.
  • minor는 새로운 기능을 위해 예약되어 있습니다. 이는 대략 분기별로 업데이트될 예정입니다.
  • patch는 버그 수정 및 새로운 Kotlin 릴리스를 위해 예약되어 있습니다. 이는 대략 매달 업데이트됩니다.

일반적으로 새로운 Kotlin 버전이 릴리스된 후 며칠 이내에 해당 KSP 릴리스를 사용할 수 있습니다( 사전 릴리스(Beta 또는 RC) 포함).

Kotlin 외에 라이브러리에 대한 다른 버전 요구 사항이 있나요?

다음은 라이브러리/인프라에 대한 요구 사항 목록입니다.

  • Android Gradle Plugin 7.1.3+
  • Gradle 6.8.3+

KSP의 향후 로드맵은 무엇인가요?

다음 항목이 계획되어 있습니다.

  • 새로운 Kotlin 컴파일러 지원
  • 멀티 플랫폼에 대한 지원 개선. 예를 들어 대상의 하위 집합에서 KSP를 실행하거나 대상 간에 계산을 공유합니다.
  • 성능 향상. 수행해야 할 최적화가 많이 있습니다!
  • 버그를 계속 수정합니다.

아이디어를 논의하고 싶으시면 언제든지 Kotlin Slack의 #ksp 채널로 연락해 주세요. (초대 받기) GitHub 이슈/기능 요청을 제출하거나 풀 요청을 보내는 것도 환영합니다!