**dependency injection(DI)**은 객체가 자신의 의존성을 직접 생성하는 대신 외부에서 의존성을 받는(주입받는) 패턴입니다. 느슨한 결합, 테스트 용이성, 유연성을 촉진하며 — 현대 소프트웨어에서 근본적이고 널리 사용되는 패턴입니다.
dependency injection이란
DI 없이 → 클래스가 자신의 의존성을 직접 생성함 (강하게 결합됨):
class OrderService { constructor() { this.db = new Database(); } } // 하드코딩된 의존성
DI와 함께 → 의존성이 외부에서 제공됨(주입됨):
class OrderService { constructor(db) { this.db = db; } } // db가 주입됨
→ 객체가 자신의 의존성을 생성/제어하지 않음 → 의존성이 주어짐
DI가 중요한 이유
✓ 테스트 용이성 → 테스트에서 mock/fake 주입 → 클래스를 고립시켜 테스트 (가장 큰 이점)
✓ 느슨한 결합 → 클래스가 구체 클래스가 아닌 추상화/인터페이스에 의존 →
구현을 쉽게 교체
✓ 유연성 → 클래스를 변경하지 않고 의존성 변경 (다양한 설정, 환경)
✓ 명시적 의존성 → 생성자가 클래스가 필요로 하는 것을 보여줌 (숨겨진 생성과 대비)
✓ 관심사 분리 → 생성/연결이 사용과 분리됨
