시배's Android

Kotlin | KSP vs KAPS 본문

Kotlin/Kotlin

Kotlin | KSP vs KAPS

si8ae 2023. 9. 20. 10:03

KSP (Kotlin Symbol Processing)

Kotlin 심볼 처리의 줄임말인 KSP Kotlin 에코시스템에 도입된 비교적 새로운 어노테이션 처리 프레임워크입니다. 프레임워크는 Java Kotlin 개발에 사용되는 기존 어노테이션 처리 방식의 가지 한계를 해결하기 위해 설계되었습니다. KSP 가지 고유한 기능을 제공합니다:

  • Strong Typing : KSP는 강력한 타이핑 기능을 제공하므로 코드 생성 로직에서 직접 Kotlin 유형으로 작업할 수 있습니다. 따라서 복잡한 유형 변환이 필요하지 않으며 코드 생성의 전반적인 안전성이 향상됩니다.
  • Improved Performance : 기존 어노테이션 처리와 비교하여 KSP는 Kotlin의 컴파일러 인프라를 활용하여 향상된 성능을 제공합니다. 증분 처리를 수행하므로 코드베이스에서 필요한 부분만 처리하므로 빌드 속도가 빨라집니다.
  • Seamless Integration with Kotlin : KSP는 Kotlin 컴파일러와 긴밀하게 통합되어 있어 Kotlin 프로젝트에 더 쉽게 사용할 수 있습니다. KSP를 사용하여 Kotlin 코드를 생성할 수 있으므로 Kotlin 중심 애플리케이션에 자연스럽게 적합합니다.

Example of KSP

@Builder
data class User(val id: Int, val name: String)

@Target(AnnotationTarget.CLASS)
annotation class Builder

@GenerateBuilder
fun User.toBuilder(): UserBuilder = UserBuilder(this)

data class UserBuilder(var id: Int = 0, var name: String = "")

@GenerateBuilder
fun UserBuilder.build(): User = User(id, name)

이 예제에서는 @Builder 어노테이션을 정의하고 KSP를 사용하여 유연한 빌더 API로 UserBuilder 클래스를 생성했습니다.

KAPS (Kotlin Annotation Processing Suite)

Kotlin 주석 처리 제품군의 줄임말인 KAPS는 Kotlin의 또 다른 어노테이션 처리 프레임워크입니다. 이 프레임워크는 Kotlin 프로젝트에서 코드를 생성하고 어노테이션 작업을 위한 다양한 기능을 제공합니다. KAPS의 주요 기능은 다음과 같습니다:

  • Simplicity : KAPS는 코드 생성을 위한 간단하고 이해하기 쉬운 API를 제공합니다. 코드 생성과 관련된 많은 복잡성을 추상화하여 다양한 수준의 경험을 가진 개발자가 액세스할 수 있습니다.
  • Compatibility : KAPS는 Kotlin과 Java 모두에서 원활하게 작동하도록 설계되어 두 언어 간의 상호 운용성이 필요한 프로젝트에 적합한 선택입니다.
  • Extensibility : KAPS를 사용하면 커스텀 프로세서와 생성기를 생성하여 프로젝트의 특정 요구 사항에 맞게 코드 생성을 조정할 수 있습니다.

Example of KAPS

@Parcelize
data class Person(val name: String, val age: Int) : Parcelable
이 경우 @Parcelize 어노테이션은 KAPS에 의해 처리되어 Person 클래스를 Parcelable로 만드는 데 필요한 writeToParcel 및 createFromParcel 메서드를 자동으로 생성합니다.

Choosing Between KSP and KAPS

KSP와 KAPS 중 어떤 것을 선택할지는 프로젝트의 요구 사항과 각 프레임워크에 대한 친숙도에 따라 달라집니다. 다음은 결정에 도움이 되는 몇 가지 고려 사항입니다:

  • Kotlin 중심 프로젝트: 프로젝트가 주로 Kotlin 기반인 경우 Kotlin의 유형 시스템과의 강력한 통합 및 향상된 성능으로 인해 KSP가 더 나은 선택일 수 있습니다.
  • 상호 운용성: Kotlin과 Java 코드가 모두 포함된 프로젝트를 진행 중인 경우 두 언어 모두와 호환되는 KAPS가 유리할 수 있습니다.
  • 복잡성: 간단한 코드 생성 작업의 경우 KAPS의 단순성이 더 매력적인 옵션이 될 수 있습니다. 그러나 고급 유형 기반 코드 생성이 필요한 경우 KSP의 강력한 유형 지정 기능이 유용할 수 있습니다.
  • 커뮤니티 및 문서: 각 프레임워크에 대한 커뮤니티 지원 및 문서의 가용성을 고려하세요. 문제가 발생하거나 지침이 필요할 때 더 큰 커뮤니티와 광범위한 문서가 유용할 수 있습니다.