[kotlin] Kodein 문서화

Kodein은 안드로이드 앱에서 사용할 수 있는 경량의 의존성 주입 프레임워크입니다. 의존성 주입을 통해 코드의 가독성을 높이고 테스트 가능한 구조를 유지할 수 있습니다.

Kodein 시작하기

Kodein을 사용하기 위해서는 먼저 프로젝트에 Kodein을 추가해야 합니다. 프로젝트의 build.gradle 파일에 다음과 같은 의존성을 추가하세요:

implementation 'org.kodein.di:kodein-di:7.0.0'

Kodein을 통한 의존성 주입 설정

의존성 주입을 사용하여 안드로이드 앱의 코드베이스를 깔끔하게 유지하기 위해 Kodein을 설정해 봅시다.

Kodein을 제대로 설정하기 위해서는 AppModule을 작성하여 여기에 앱의 의존성을 정의해야 합니다. 다음은 AppModule 클래스의 예시입니다:

import org.kodein.di.DI

val appModule = DI.Module("appModule") {
    bind<SomeService>() with singleton { SomeServiceImpl(instance()) }
    bind<AnotherService>() with singleton { AnotherServiceImpl(instance()) }
}

위 코드에서 appModule에는 SomeServiceAnotherService의 의존성을 정의한 것을 볼 수 있습니다.

앱의 진입점에서 Kodein을 초기화하고 위에서 정의한 appModule을 사용하여 의존성을 주입해야 합니다. 일반적으로 Application 클래스에서 이 작업을 수행합니다. 다음은 Application 클래스에서 Kodein을 초기화하는 방법입니다:

import android.app.Application
import org.kodein.di.DI
import org.kodein.di.DIAware
import org.kodein.di.android.x.androidXModule

class MyApp : Application(), DIAware {
    override val di: DI by DI.lazy {
        import(androidXModule(this@MyApp))
        import(appModule)
    }
}

위 코드에서 MyApp 클래스는 DIAware 인터페이스를 구현하여 Kodein을 초기화합니다.

Kodein을 사용하여 의존성 주입하기

의존성이 필요한 곳에서 Kodein을 사용하여 해당 의존성을 주입할 수 있습니다. 다음은 Activity에서 Kodein을 사용하는 예시입니다:

import org.kodein.di.instance

class MainActivity : AppCompatActivity(), DIAware {
    override val di: DI by di()
    private val someService: SomeService by instance()

    // ...
}

MainActivity 클래스에서 someServiceinstance() 함수를 통해 주입받았습니다.

Kodein을 사용한 의존성 주입을 통해 깔끔한 코드와 테스트 가능한 구조를 갖춘 안드로이드 앱을 구축할 수 있습니다.

더 많은 내용을 알고 싶다면 여기를 확인하세요.