---
id: [[P-Reinforce|P-Reinforce]]-AI-DIP
category: "10_Wiki/💡 Topics/AI"
confidence_score: 0.98
tags: [SoftwareEngineering, SOLID, DIP, [[Architecture|Architecture]]]
last_reinforced: 2026-04-20
---

# [[Dependency-Inversion-Principle|Dependency-Inversion-Principle]] (의존 관계 역전 원칙)

## 📌 한 줄 통찰 (The Karpathy Summary)
> "구체적인 벽돌이 아니라 설계도에 의존하라." 상위 모듈이 하위 모듈에 직접 의존하는 것이 아니라, 둘 다 추상화(인터페이스)에 의존하게 만듦으로써 시스템의 변화를 유연하게 수용하는 SOLID의 핵심 원칙이다.

## 📖 구조화된 지식 (Synthesized Content)
- **The Rule**:
    - 1. 상위 모듈은 하위 모듈 구현에 의존해서는 안 된다.
    - 2. 추상화는 세부 사항에 의존해서는 안 되며, 세부 사항이 추상화에 의존해야 한다.
- **Why Inverse?**:
    - 기존의 전통적인 설계는 상위 수준의 로직이 하위 수준의 도구에 끌려다니는 구조였으나, 이 원칙을 적용하면 도구가 로직(인터페이스)에 맞춰 끼워지는 형태로 흐름이 역전된다.
- **Impact**: 특정 라이브러리나 프레임워크를 교체할 때 상위 비즈니스 로직을 전혀 건드리지 않아도 되는 강력한 격리 능력을 제공한다.

## ⚠️ 모순 및 업데이트 (RL Update)
- DIP를 지키려면 인터페이스 설계가 선행되어야 하는데, 도메인에 대한 이해가 부족할 때 성급하게 인터페이스를 만들면 생산성만 떨어뜨리는 '과잉 설계(Over-engineering)'가 될 수 있다. 변화가 거의 없는 확실한 부분은 구체 클래스에 의존하는 것이 나을 때도 있다.

## 🔗 지식 연결 (Graph)
- Related: SOLID-[[Principles|Principles]] , [[Dependency-Injection|Dependency-Injection]]
- Part of: Clean-Architecture
