Что такое внедрение зависимостей

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

Ответ

Внедрение зависимостей (DI) — это паттерн проектирования, при котором объекты получают свои зависимости извне, а не создают их внутри. Это делает код более гибким, тестируемым и поддерживаемым.

Основные преимущества:

  • Уменьшение связанности кода
  • Упрощение тестирования (можно подменять зависимости моками)
  • Упрощение повторного использования кода

Пример с Dagger/Hilt:

// Зависимость
class NetworkService @Inject constructor() { ... }

// Класс, использующий зависимость
class Repository @Inject constructor(
    private val networkService: NetworkService
) { ... }

Способы внедрения:

  1. Через конструктор (предпочтительно)
  2. Через поля (setter injection)
  3. Через интерфейсы

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