Skip to content

Gradle 설정

이 가이드는 Gradle 프로젝트에 Koin 의존성을 추가하는 방법을 다룹니다.

Koin BOM (권장)

Bill of Materials (BOM)는 Koin 의존성을 관리하는 데 권장되는 방식입니다. 이는 모든 Koin 라이브러리가 호환되는 버전을 사용하도록 보장합니다.

INFO

권장 사항(Best Practice): Koin 라이브러리 간의 버전 충돌을 피하기 위해 항상 Koin BOM을 사용하세요.

버전 카탈로그 사용 (권장)

gradle/libs.versions.toml 파일에서:

toml
[versions]
koin-bom = "4.2.0"

[libraries]
koin-bom = { module = "io.insert-koin:koin-bom", version.ref = "koin-bom" }
koin-core = { module = "io.insert-koin:koin-core" }
koin-android = { module = "io.insert-koin:koin-android" }
koin-compose = { module = "io.insert-koin:koin-compose" }
koin-compose-viewmodel = { module = "io.insert-koin:koin-compose-viewmodel" }
koin-ktor = { module = "io.insert-koin:koin-ktor" }
koin-test = { module = "io.insert-koin:koin-test" }

build.gradle.kts 파일에서:

kotlin
dependencies {
    implementation(platform(libs.koin.bom))
    implementation(libs.koin.android)  // 버전 지정 불필요
}

BOM 직접 사용

kotlin
dependencies {
    implementation(platform("io.insert-koin:koin-bom:$koin_version"))

    // 버전 없이 의존성 추가
    implementation("io.insert-koin:koin-android")
    implementation("io.insert-koin:koin-compose")  // Android 및 멀티플랫폼에서 작동
}

플랫폼별 설정

Kotlin/JVM

순수 Kotlin 애플리케이션의 경우:

kotlin
dependencies {
    implementation(platform("io.insert-koin:koin-bom:$koin_version"))
    implementation("io.insert-koin:koin-core")
}

애플리케이션에서 Koin 시작:

kotlin
fun main() {
    startKoin {
        modules(appModule)
    }
}

테스트 의존성:

kotlin
dependencies {
    testImplementation("io.insert-koin:koin-test")
    testImplementation("io.insert-koin:koin-test-junit5")  // 또는 junit4
}

Android

Android 애플리케이션의 경우:

kotlin
dependencies {
    implementation(platform("io.insert-koin:koin-bom:$koin_version"))
    implementation("io.insert-koin:koin-android")
}

Application 클래스에서 Koin 시작:

kotlin
class MainApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        startKoin {
            androidLogger()
            androidContext(this@MainApplication)
            modules(appModule)
        }
    }
}

선택 사항 Android 패키지:

kotlin
dependencies {
    // Jetpack WorkManager
    implementation("io.insert-koin:koin-androidx-workmanager")

    // Navigation Graph
    implementation("io.insert-koin:koin-androidx-navigation")

    // AndroidX Startup
    implementation("io.insert-koin:koin-androidx-startup")

    // Java Compatibility
    implementation("io.insert-koin:koin-android-compat")
}

Jetpack Compose를 사용한 Android

Jetpack Compose를 사용하는 Android 앱의 경우:

kotlin
dependencies {
    implementation(platform("io.insert-koin:koin-bom:$koin_version"))
    implementation("io.insert-koin:koin-android")
    implementation("io.insert-koin:koin-compose")
    implementation("io.insert-koin:koin-compose-viewmodel")
}

Navigation 사용 시:

kotlin
dependencies {
    // Navigation 2 (Android 전용)
    implementation("io.insert-koin:koin-androidx-compose-navigation")

    // 또는 Navigation 3
    implementation("io.insert-koin:koin-compose-navigation3")
}

INFO

koin-androidx-compose는 이제 koin-compose에 포함됩니다.

Compose 멀티플랫폼(Multiplatform)

Compose 멀티플랫폼 프로젝트(Android, iOS, Desktop, Web)의 경우:

kotlin
dependencies {
    implementation(platform("io.insert-koin:koin-bom:$koin_version"))
    implementation("io.insert-koin:koin-compose")
    implementation("io.insert-koin:koin-compose-viewmodel")
    implementation("io.insert-koin:koin-compose-viewmodel-navigation")
}

INFO

koin-compose는 Android 지원을 자동으로 포함합니다. Compose 멀티플랫폼 프로젝트에서는 별도의 koin-android가 필요하지 않습니다.

Kotlin 멀티플랫폼(Multiplatform)

공유 모듈의 build.gradle.kts에서:

kotlin
kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation(platform("io.insert-koin:koin-bom:$koin_version"))
            implementation("io.insert-koin:koin-core")
        }

        commonTest.dependencies {
            implementation("io.insert-koin:koin-test")
        }

        androidMain.dependencies {
            implementation("io.insert-koin:koin-android")
        }
    }
}

Ktor

Ktor 서버 애플리케이션의 경우:

kotlin
dependencies {
    implementation(platform("io.insert-koin:koin-bom:$koin_version"))
    implementation("io.insert-koin:koin-ktor")
    implementation("io.insert-koin:koin-logger-slf4j")
}

Ktor 애플리케이션에 Koin 설치:

kotlin
fun Application.module() {
    install(Koin) {
        slf4jLogger()
        modules(appModule)
    }
}

사용 가능한 모든 패키지

현재 최신 버전: Maven Central

패키지설명
koin-coreKoin 코어 라이브러리
koin-core-coroutines코루틴 지원
koin-androidAndroid 지원
koin-android-compatAndroid용 Java 호환성
koin-androidx-navigationNavigation 컴포넌트 지원
koin-androidx-workmanagerWorkManager 지원
koin-androidx-startupAndroidX Startup 지원
koin-composeCompose (Android 및 멀티플랫폼)
koin-compose-viewmodelCompose용 ViewModel
koin-compose-viewmodel-navigationCompose 멀티플랫폼용 Navigation + ViewModel
koin-androidx-compose⚠️ 대체됨 - 대신 koin-compose를 사용하세요
koin-androidx-compose-navigationAndroid용 Navigation 2 (KMP 호환되지 않음)
koin-compose-navigation3Navigation 3
koin-ktorKtor 서버 지원
koin-logger-slf4jSLF4J 로깅
koin-test테스트 유틸리티
koin-test-junit4JUnit 4 지원
koin-test-junit5JUnit 5 지원
koin-android-testAndroid 계측 테스트(Instrumented testing)

직접 버전 지정

BOM을 사용하지 않으려는 경우:

kotlin
dependencies {
    implementation("io.insert-koin:koin-core:$koin_version")
    implementation("io.insert-koin:koin-android:$koin_version")
}

NOTE

이 방식은 모든 의존성을 수동으로 동기화해야 합니다. BOM 사용을 강력히 권장합니다.

다음 단계