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

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

Ответ

Принцип инверсии зависимостей (DIP) — один из SOLID-принципов, гласящий:

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

Пример:

interface Storage {  
    fun save(data: String)  
}  

class DatabaseStorage : Storage {  
    override fun save(data: String) { /* SQL запрос */ }  
}  

class UserRepository(private val storage: Storage) {  
    fun saveUser(user: User) {  
        storage.save(user.toString())  
    }  
}  

Здесь UserRepository (верхний уровень) зависит от абстракции Storage, а не от конкретной реализации DatabaseStorage (нижний уровень). Это упрощает замену хранилища (например, на SharedPreferencesStorage) без изменения кода репозитория.