2.5 KiB
2.5 KiB
id, category, confidence_score, tags, last_reinforced
| id | category | confidence_score | tags | last_reinforced | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| P-REINFORCE-AUTO-WIKI-ARCH-003 | 10_Wiki/💡 Topics/02_Architecture_Principles | 0.95 |
|
2026-05-01 |
Dependency Injection (DI)
📌 한 줄 통찰 (The Karpathy Summary)
"클래스 내부에서 직접 의존 객체를 생성하지 않고 외부에서 주입받음으로써, 객체 간의 결합을 끊어내고 테스트와 확장이 용이한 '유연한 부품'으로 만드는 제어 역전(IoC)의 실천적 기법."
📖 구조화된 지식 (Synthesized Content)
DI는 현대 소프트웨어 아키텍처에서 컴포넌트 간의 결합도를 낮추는 핵심 메커니즘입니다.
- 제어의 역전 (IoC):
- 객체가 스스로 의존성을 생성(new)하는 권한을 포기하고, 외부(컨테이너)로부터 주입받습니다.
- 이를 통해 구현체(Concrete Implementation)가 아닌 추상화(Interface/Abstract Class)에 의존하게 됩니다.
- 생명주기(Lifetime) 관리:
- 주입되는 객체의 생존 범위(Transient, Scoped, Singleton)를 중앙에서 통제합니다.
- 잘못된 생명주기 설정은 메모리 누수나 의도치 않은 상태 공유를 초래할 수 있으므로 코드 리뷰의 필수 체크 항목입니다.
- 프레임워크별 관례:
- Spring(Java)에서는 생성자 주입(Constructor Injection)을 권장하며, .NET에서는 빌트인 DI 컨테이너를 통한 인터페이스 바인딩을 기본으로 합니다.
⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- 생명주기 오용 리스크: Scoped 객체가 Singleton 객체에 주입되는 등 생명주기 불일치가 발생할 경우, 데이터가 의도보다 오래 유지되거나 런타임 에러가 발생할 수 있습니다.
- 코드 추적성 저하: 정적 코드만으로는 어떤 구현체가 주입될지 즉각 확인하기 어려울 수 있습니다. 이를 해결하기 위해 명확한 네이밍 컨벤션과 DI 바인딩 로그의 가시성 확보가 중요합니다.
🔗 지식 연결 (Graph)
- SOLID Principles: 의존성 역전 원칙(DIP)의 실현 방법.
- Single Responsibility Principle (SRP): 클래스의 책임을 생성과 실행으로 분리하는 관점.
- Testability: Mock 객체 주입을 통한 단위 테스트 용이성 확보.
- Constructor Injection: 가장 권장되는 DI 패턴.
- Dependency Lifetimes: Transient, Scoped, Singleton의 이해.