В чем разница между Dagger и Koin

«В чем разница между Dagger и Koin» — вопрос из категории DI, который задают на 32% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Dagger — это compile-time DI-фреймворк, генерирующий код на этапе компиляции. Он строго типизирован, требует аннотаций (@Module, @Inject и т.д.), но обеспечивает высокую производительность.

Koin — легковесный runtime DI, работающий на рефлексии. Не требует кодогенерации, проще в настройке, но менее производительный и без проверки зависимостей на этапе компиляции.

Пример Dagger:

@Module
class AppModule {
    @Provides
    fun provideRepository(): Repository = RepositoryImpl()
}

Пример Koin:

val appModule = module {
    single<Repository> { RepositoryImpl() }
}

Выбор зависит от проекта: Dagger — для больших приложений с акцентом на производительность, Koin — для быстрого старта и простоты.