Ответ
Dependency Inversion Principle (DIP) — это принцип SOLID, который гласит, что модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций. Dependency Injection (DI) — это паттерн, реализующий DIP, позволяя передавать зависимости извне (через конструктор, методы или поля), а не создавать их внутри класса.
Пример с DIP + DI:
interface Repository {
fun getData(): String
}
class NetworkRepository : Repository {
override fun getData() = "Data from network"
}
class ViewModel(private val repo: Repository) { // DI через конструктор
fun loadData() = repo.getData()
}
DI обеспечивает гибкость, тестируемость и соблюдение DIP, так как ViewModel зависит от абстракции (Repository), а не от конкретной реализации.