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

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

Ответ

Инверсия зависимостей (Dependency Inversion Principle, DIP) — один из принципов SOLID, который гласит:

  1. Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций.
  2. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Пример без DIP:

class Engine { fun start() {} }  
class Car {  
    private val engine = Engine()  
    fun start() { engine.start() }  
}  

Здесь Car напрямую зависит от Engine.

Пример с DIP:

interface Engine { fun start() }  
class PetrolEngine : Engine { override fun start() {} }  
class Car(private val engine: Engine) {  
    fun start() { engine.start() }  
}  

Теперь Car зависит от абстракции (Engine), а не от конкретной реализации.

Плюсы:

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