---
id: P-REINFORCE-AI-DEPENDENCY-INJECTION
category: "10_Wiki/💡 Topics/AI"
confidence_score: 0.99
tags: [SoftwareEngineering, Patterns, DI, Decoupling]
last_reinforced: 2026-04-20
---

# [[Dependency-Injection]] (의존성 주입)

## 📌 한 줄 통찰 (The Karpathy Summary)
> "직접 사러 가지 말고, 배달받아 써라." 객체가 필요한 의존 객체를 스스로 생성하지 않고, 외부에서 주입받음으로써 코드 간의 결합도를 낮추고 테스트 용이성을 극대화하는 디자인 패턴이다.

## 📖 구조화된 지식 (Synthesized Content)
- **The Core Concept**:
    - 클래스 내부에서 `new Service()`를 호출하는 순간, 그 클래스는 해당 서비스에 강하게 결합(Coupled)된다.
    - DI는 생성자(Constructor)나 메서드 인자를 통해 외부에서 구현체를 전달받는다.
- **Benefits**:
    - **Testability**: 실제 DB 대신 가짜(Mock) 객체를 주입하여 단위 테스트 가능.
    - **Flexibility**: 코드 수정 없이 실행 시점에 구현체 교체 가능.
    - **Maintenance**: 의존성 관리가 한곳(Container)으로 집중되어 구조 파악이 용이.
- **Types**: Constructor Injection, Setter Injection, Interface Injection.

## ⚠️ 모순 및 업데이트 (RL Update)
- DI 프레임워크(Spring, NestJS 등)를 과도하게 사용하면 의존성 그래프가 너무 복잡해져 런타임 성능에 영향을 주거나 디버깅이 어려워지는 'DI 지옥'에 빠질 수 있다. 객체 간의 관계가 명확할 때는 과도한 추상화보다 직관적인 구성을 고려해야 한다.

## 🔗 지식 연결 (Graph)
- Related: [[Dependency-Inversion-Principle]] , Inversion-of-Control (IoC)
- Pattern: Factory-Method-Pattern
