DI(Dependency Injection), 의존관계 주입
의존관계는 정적인 클래스 의존 관계와, 실행 시점에서 결정되는 동적인 객체(인스턴스) 두 가지를 분리하여 생각해야 한다.
클래스 의존 관계
- 정적인 의존관계는 애플리케이션을 실행하지 않고 클래스가 사용하는 import 코드만 보아도 판단이 가능하다.

- 위의 클래스 다이어그램을 살펴보면, OrderService의 구현 객체인 OrderServiceImpl은 인터페이스 MemberRepository와 DiscountPolicy를 의존한다는 것을 알 수 있다.
- 하지만 이런 클래스 의존관계만으로는 실제 어떤 객체가 OrderServiceImpl에 주입되는지 알 수 없다.
객체 의존 관계
동적인 객체(인스턴스) 의존 관계: 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계이다.

- 의존관계 주입(DI): 애플리케이션 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존 관계가 연결되는 것을 말한다.
- 인터페이스와 구현체 간의 관계를 보면 인터페이스 입장에서는 구현체를 알 수 없다. 그렇기 때문에 이 인터페이스와 구현체 사이의 연결점을 만들어주기 위해서 의존 관계를 주입한다.
- 의존관계 주입을 사용하면 정적인 클래스 의존관계를 변경하지 않고 동적인 객체 의존관계를 변경할 수 있다.
- 기존의 주문 서비스에서 저장소를 사용하는 클래스 의존 관계는 변하지 않는다. 즉 저장소의 구현체인 내부 메모리 저장소를 사용할 것인지, DB 저장소를 사용할 것인지를 선택하는 객체 의존 관계는 변경이 가능한 것이다.
- 외부 설정에서 구현체만 변경해주면 되기 때문에 기존 클라이언트 코드를 전혀 손대지 않고도 의존관계 변경이 가능하다.
※ 해당 포스팅은 김영한 강사님의 Spring 강좌를 듣고 중요 내용 중심으로 정리하게 되었습니다.
'Spring' 카테고리의 다른 글
| [Spring] 스프링 컨테이너에 대하여 알아보자. (0) | 2025.09.30 |
|---|---|
| [Spring] IOC란? (0) | 2025.09.28 |