데브허브 | DEVHUB | Koin Annotations In Compose Multiplatform - Beginner's Guide to Compile-Time Dependency InjectionKoin Annotations In Compose Multiplatform - Beginner's Guide to Compile-Time Dependency Injection
- Dagger Hilt는 Java 코드를 생성하므로 Compose Multiplatform 프로젝트와 호환되지 않습니다. 🚫
- Koin은 현재 Kotlin Multiplatform 프로젝트를 위한 가장 적합하고 선호되는 의존성 주입(DI) 프레임워크입니다. ✨
- Koin은 컴파일 시 코드 생성(KSP)을 활용하는 어노테이션 기반 DI 방식을 제공하며, 이는 많은 사람이 모르는 새로운 기능입니다. 💡
- 의존성 주입(DI)은 단순히 클래스 인스턴스(의존성)를 다른 클래스에 전달하는 것으로, 주로 생성자를 통해 이루어져 코드의 유연성과 테스트 용이성을 높입니다. ➡️
- DI를 사용하지 않고 의존성을 클래스 내부에 하드코딩하면 유연성이 떨어져 테스트나 다양한 구현을 교체하기 어렵습니다. 🧱
- Koin은 두 가지 접근 방식을 제공합니다: 동적(서비스 로케이터) 방식은 유연하지만 컴파일 타임 안전성이 부족하고 나쁜 관행을 유도할 수 있습니다. 🗺️
- Koin 어노테이션 방식은 컴파일 시 코드 생성(KSP)을 통해 의존성을 연결하며, 컴파일 타임 안전성, 빠른 런타임 성능, 그리고 '진정한 DI'를 강제합니다. ✍️
- Koin 어노테이션의 장점은 컴파일 타임에 누락된 의존성을 감지하여 런타임 오류를 방지하고, 코드가 미리 생성되어 런타임 성능이 빠르며, 생성자 주입을 강제하여 좋은 코딩 관행을 유도한다는 점입니다. ✅🚀💪
- Koin 어노테이션(및 일반적인 어노테이션 기반 DI)의 단점은 컴파일 타임 오류 해결이 매우 복잡하고 시간이 많이 소요될 수 있다는 것입니다. 특히 KSP, Koin, Kotlin 버전 충돌 시 디버깅이 어렵습니다. 🤯😩
- Koin 어노테이션 설정을 위해서는 JetBrains KMP 프로젝트 생성기를 사용하고,
libs.versions.toml 및 build.gradle.kts 파일에 Koin, KSP, Ktor, Navigation Compose, Kotlin Serialization 관련 의존성과 플러그인을 추가해야 합니다. 🛠️⚙️
- KSP 버전은 Kotlin 버전과 반드시 일치해야 합니다. 🔗📦