Files
2nd/10_Wiki/Topics/Dependency Injection (DI).md
T
2026-05-02 23:33:34 +09:00

2.6 KiB

id, category, confidence_score, tags, last_reinforced
id category confidence_score tags last_reinforced
P-REINFORCE-AUTO-WIKI-ARCH-003 Unified 0.95
architecture
di
dependency-injection
decoupling
inversion-of-control
p-reinforce
2026-05-01

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)