Fix: Restore unified Topics folder and reorganize specialized category folders

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