티스토리 뷰

앞서 IoC 에서 작성한 OrderServiceImpl, AppConfig 코드를 다시 한번 살펴보자.

OrderServiceImpl 클래스
AppConfig 클래스

위 코드를 보면 클래스 간 의존관계를 알 수 있다. 여기서 의존관계란, 1) 두 클래스 사이에서 어떤 클래스가 호출부(client)이고 어떤 클래스가 응답부(server)인지 혹은 2) 상속관계나 인터페이스-구현 관계를 나타낸다.

 

의존관계는 정적인 클래스 의존관계, 동적인 객체 의존관계로 분류된다.

 

정적인 클래스 의존 관계

  • import 코드 만으로 파악 가능. e.g. OrderServiceImpl은 MemberRepository, DiscountPolicy에 의존한다.

동적인 객체 의존 관계

  • 어플리케이션 실행 시점(런타임)에 파악 가능. e.g. OrderService에 할인 정책으로 정액할인제를 주입한다는 것은 어플리케이션 실행 시점에 알 수 있다.(OrderServiceImpl 관점에서)

 

 

동적인 객체 의존 관계와 유사하게, 어플리케이션 실행 시점에, 외부에서 실제 구현 객체를 생성하고, 클라이언트에 이를 전달해서 클라이언트와 서버간 실제 의존 관계가 연결되는 것을 의존관계 주입(Dependency Injection) 이라 한다. 외부에서 객체 인스턴스를 생성하고, 인스턴스의 참조값을 클라이언트로 전달해서(주로 생성자를 이용) 클라이언트-객체 간 연결이 맺어진다.

 

 

 

의존관계 주입 장점

  • 클라이언트 코드를 변경하지 않고 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다.

    • e.g. 정액할인제에서 정률할인제로 바꾸고자 할 때, OrderServiceImpl은 전혀 수정하지 않아도 된다.
  • 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 의존관계를 쉽게 바꿀 수 있다.

 

 

DI 컨테이너

위 코드 상 AppConfig처럼 객체를 생성, 관리하면서 의존관계를 연결해 주는 것을 DI 컨테이너라고 한다.

 

 

 

 

사진, 내용 출처 : 인프런, 김영한 강사님의 '스프링 핵심 원리 - 기본편' 강좌, 강의자료

https://inf.run/TErf

'SPRING' 카테고리의 다른 글

싱글톤 컨테이너 (2) 원리  (0) 2021.01.21
싱글톤 컨테이너 (1) 등장배경, 정의, 주의사항  (0) 2021.01.21
제어의 역전(IoC)  (0) 2021.01.18
다형성과 스프링  (0) 2021.01.14
스프링이란?  (0) 2021.01.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함