Для чего нужен Dependency Injection в Android приложениях

«Для чего нужен Dependency Injection в Android приложениях» — вопрос из категории DI, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Dependency Injection (DI) помогает управлять зависимостями между компонентами приложения, делая код более модульным, тестируемым и поддерживаемым. Вместо жесткого создания объектов внутри классов, зависимости передаются извне (через конструктор, методы или поля).

Пример с Dagger/Hilt:

// Без DI
class MyRepository {
    private val api = ApiService() // Жесткая зависимость
}

// С DI (Hilt)
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
    @Provides
    fun provideApi(): ApiService = ApiService()
}

class MyRepository @Inject constructor(private val api: ApiService) // Зависимость внедрена

Преимущества:

  • Упрощает тестирование (можно передавать mock-объекты).
  • Уменьшает связанность кода.
  • Упрощает замену реализаций (например, для разных сборок).

Популярные библиотеки: Dagger, Hilt, Koin.