의존성 주입 컨테이너를 이해하는 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
C#/.NET 웹 개발자, 의존성 주입(DI) 개념에 대한 이해가 필요한 초보자
핵심 요약
- 의존성 주입 컨테이너는
Program.cs
에서 서비스 등록을 통해 객체 생성을 자동화함 - 역할 분리에 의해
IChef
,IFridge
같은 인터페이스를 사용하여 결합도를 낮추고 테스트 용이성 증가 - Inversion of Control (IoC): 개발자는 "필요한 것"을 선언하고, 컨테이너가 구현체를 자동으로 주입
섹션별 세부 요약
1. 의존성 주입의 비유: 식당 운영
- 식당 관리자(개발자)는 구체적인 작업(예: 양파 다듬기)을 직접 조절하지 않고, 보조 매니저(DotNetta)에게 위임
services.AddScoped
와 같은 코드로 서비스 등록을 통해 의존성 관계 정의(); IChef
,IFridge
인터페이스를 통해 구현체와 추상화 분리
2. `Program.cs`의 역할: 서비스 등록
services.AddScoped
,AddSingleton
,AddTransient
메서드로 서비스의 수명 범위 정의IChef
,ISupplier
등의 인터페이스를 등록하여 컨테이너가 의존성을 자동 주입KitchenService
클래스가IChef
인터페이스를 주입받는 방식으로 코드 간결화
3. Inversion of Control (IoC)의 실현
- 역할 분리: 개발자는 구체적인 구현체 생성 대신 "필요한 서비스"를 선언
- DI 컨테이너가
UserRepo
,UserService
등의 객체를 생성 및 주입 var repo = new UserRepo();
→services.AddSingleton
로 대체();
결론
Program.cs
는 의존성 주입 컨테이너(DotNetta)에게 서비스 등록 지침을 제공하는 설정 파일IChef
,IFridge
인터페이스를 통해 결합도를 낮추고, 테스트 및 유지보수 용이- "필요한 것을 선언"하는 방식으로 코드 복잡도를 줄이고, 의존성 관리 자동화 가능