Android에서 Koin 시작하기
koin-android 프로젝트는 Android 환경에 Koin의 기능을 제공하는 데 중점을 둡니다. 자세한 내용은 Android 설정 섹션을 참조하세요.
Application 클래스에서 시작하기
Application 클래스에서 startKoin 함수를 사용하고 androidContext로 Android 컨텍스트를 다음과 같이 주입할 수 있습니다:
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
// Koin을 Android 로거에 기록
androidLogger()
// Android 컨텍스트 참조
androidContext(this@MainApplication)
// 모듈 로드
modules(myAppModules)
}
}
}INFO
Application 클래스에서 Koin을 시작하고 싶지 않다면, 어디서든 Koin을 시작할 수 있습니다.
다른 Android 클래스에서 Koin을 시작해야 하는 경우, startKoin 함수를 사용하여 Android Context 인스턴스를 다음과 같이 제공할 수 있습니다:
startKoin {
// Android 컨텍스트 주입
androidContext(/* your android context */)
// ...
}추가 설정
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 인스턴스를 반환합니다.
INFO
KoinStartup은 시작 시 메인 스레드 블로킹을 방지하고 더 나은 성능을 제공합니다.
Koin을 사용한 시작 의존성
Koin이 설정되고 의존성을 주입할 수 있도록 하려면, Initializer가 KoinInitializer에 의존하도록 만들 수 있습니다:
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)
}
}