Learning
토픽 54 / 192·소프트웨어 설계와 아키텍처

DI (Dependency Injection) / IoC (Inversion of Control)

DI (Dependency Injection) / IoC (Inversion of Control)

객체 간 의존성을 외부에서 주입하여 결합도를 낮추는 설계 원칙(IoC)과 구현 기법(DI)

IoC (제어의 역전): 객체 생성/관리 책임을 프레임워크(컨테이너)에 위임, 할리우드 원칙("Don't call us, we'll call you")

DI 3가지 주입 방식

  • 생성자 주입(Constructor): 불변성 보장, 필수 의존성, Spring 권장 방식
  • 세터 주입(Setter): 선택적 의존성, 변경 가능
  • 필드 주입(Field): @Autowired 직접 주입, 테스트 어려움, 비권장

IoC 컨테이너: Spring IoC, Guice, Dagger, .NET DI Container

장점: 테스트 용이(Mock 주입), 결합도↓, OCP/DIP 준수

단점: 설정 복잡도, 런타임 오류 가능, 학습 곡선

비교: 생성자주입(불변/필수/추천) vs 세터주입(가변/선택) vs 필드주입(간편/비추천)

연관: SOLID(DIP), 디자인 패턴(Factory), Spring Framework