티스토리 뷰

SPRING

제어의 역전(IoC)

짜비 2021. 1. 18. 23:30

어떤 객체를 구현하면, 이 객체가 프로그램의 제어 흐름을 스스로 조종하는 것이 일반적이다. 다시 말해 필요한 다른 객체를 스스로 생성하고, 객체끼리 연결, 실행하는 것을 객체 내에서 관리한다.

 

OrderServiceImpl 클래스

 

위 코드를 예로 들면, OrderServiceImpl 이라는 객체는 자신이 필요한 memberRepository 객체, discountPolicy 객체를 스스로 생성한다. 이 때 MemberRepository 구현 클래스를 메모리(MemoryMemberRepository)로 하고, 할인율은 정액할인제(FixDiscountPolicy)로 한다. 이렇듯 OrderServiceImpl은 자신의 임무를 수행하면서 필요한 객체, 함수 등을 직접 생성, 호출한다.


수정된 OrderServiceImpl 클래스
AppConfig 클래스

한편 위 코드를 보면 OrderServiceImpl에 구현되어 있던 객체 생성자, 구현 클래스 등을 외부에 있는 AppConfig로 빼냈다.

  • 이제 OrderServiceImpl 에는 MemberRepository, DiscountPolicy의 인터페이스만 남아있다. OverServiceImpl 입장에서는 repository를 DB를 이용할 것인지, 메모리를 이용할 것인지. 그리고 할인 정책은 정액할인제를 이용할지 정률할인제를 이용할지 알 수 없다.

  • AppConfig가 OrderServiceImpl의 생성자를 호출한다.

 

앞서 보았던 코드와 달리 OrderServiceImpl이 가지고 있던 프로그램의 제어 권한이 외부에 있는 AppConfig에게 넘어간 셈이다. 이와 같이 프로그램의 제어흐름을 직접 관리하지 않고 외부에서 관리하는 것제어의 역전(Inversion Of Control)이라 한다.

 

 

이해를 돕기위해 프레임워크와 라이브러리를 비교해보자.

 

  • 프레임워크 : 외부에 있는 프레임워크가 내가 작성한 코드를 대신 제어, 실행한다.

    • e.g. Junit. test 프로그램을 돌릴 때, Junit이 나름의 cycle을 가지고 있고, cycle의 일부로써 내가 작성한 코드를 call-back 형태로 호출한다.
  • 라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 담당한다.

    • e.g. 프로그래머가 직접 라이브러리를 호출한다.

 

 

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

https://inf.run/TErf

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함