본문으로 건너뛰기

Android에서 Koin 시작하기

koin-android 프로젝트는 Koin의 기능을 Android 세계에 제공하기 위해 만들어졌습니다. 자세한 내용은 Android 설정 섹션을 참조하십시오.

Application 클래스에서

Application 클래스에서 startKoin 함수를 사용하고 다음과 같이 androidContext로 Android 컨텍스트를 주입할 수 있습니다.

class MainApplication : Application() {

override fun onCreate() {
super.onCreate()

startKoin {
// Android 로거에 Koin 로깅
androidLogger()
// Android 컨텍스트 참조
androidContext(this@MainApplication)
// 모듈 로드
modules(myAppModules)
}
}
}
정보

Application 클래스에서 시작하고 싶지 않은 경우 어디에서든 Koin을 시작할 수도 있습니다.

다른 Android 클래스에서 Koin을 시작해야 하는 경우 startKoin 함수를 사용하고 다음과 같이 Android Context 인스턴스를 제공할 수 있습니다.

startKoin {
// Android 컨텍스트 주입
androidContext(/* your android context */)
// ...
}

추가 구성 (Extra Configurations)

Koin 구성 (startKoin { } 블록 코드)에서 Koin의 여러 부분을 구성할 수도 있습니다.

Android용 Koin 로깅

KoinApplication 인스턴스 내에서 AndroidLogger() 클래스를 사용하는 androidLogger 확장 프로그램이 있습니다. 이 로거는 Koin 로거의 Android 구현입니다.

필요에 맞지 않으면 이 로거를 변경할 수 있습니다.

startKoin {
// Android 로거 사용 - 기본적으로 Level.INFO
androidLogger()
// ...
}

속성 로드

assets/koin.properties 파일에서 Koin 속성을 사용하여 키/값을 저장할 수 있습니다.

startKoin {
// ...
// assets/koin.properties에서 속성 사용
androidFileProperties()
}

Androidx Startup으로 Koin 시작 (4.0.1) [실험적 기능]

Gradle 패키지 koin-androidx-startup을 사용하면 KoinStartup 인터페이스를 사용하여 Application 클래스에서 Koin 구성을 선언할 수 있습니다.

class MainApplication : Application(), KoinStartup {

override fun onKoinStartup() = koinConfiguration {
androidContext(this@MainApplication)
modules(appModule)
}

override fun onCreate() {
super.onCreate()
}
}

이는 일반적으로 onCreate에서 사용되는 startKoin 함수를 대체합니다. koinConfiguration 함수는 KoinConfiguration 인스턴스를 반환합니다.

정보

KoinStartup은 시작 시 메인 스레드를 차단하는 것을 방지하고 더 나은 성능을 제공합니다.

Koin을 사용한 시작 종속성 (Startup Dependency)

Koin이 설정되어야 하고 종속성을 주입할 수 있도록 하려면 InitializerKoinInitializer에 의존하도록 만들 수 있습니다.

class CrashTrackerInitializer : Initializer<Unit>, KoinComponent {

private val crashTrackerService: CrashTrackerService by inject()

override fun create(context: Context) {
crashTrackerService.configure(context)
}

override fun dependencies(): List<Class<out Initializer<*>>> {
return listOf(KoinInitializer::class.java)
}

}