티스토리 뷰
어떤 객체를 구현하면, 이 객체가 프로그램의 제어 흐름을 스스로 조종하는 것이 일반적이다. 다시 말해 필요한 다른 객체를 스스로 생성하고, 객체끼리 연결, 실행하는 것을 객체 내에서 관리한다.
위 코드를 예로 들면, OrderServiceImpl 이라는 객체는 자신이 필요한 memberRepository 객체, discountPolicy 객체를 스스로 생성한다. 이 때 MemberRepository 구현 클래스를 메모리(MemoryMemberRepository)로 하고, 할인율은 정액할인제(FixDiscountPolicy)로 한다. 이렇듯 OrderServiceImpl은 자신의 임무를 수행하면서 필요한 객체, 함수 등을 직접 생성, 호출한다.
한편 위 코드를 보면 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. 프로그래머가 직접 라이브러리를 호출한다.
사진, 내용 출처 : 인프런, 김영한 강사님의 '스프링 핵심 원리 - 기본편' 강좌, 강의자료
'SPRING' 카테고리의 다른 글
싱글톤 컨테이너 (2) 원리 (0) | 2021.01.21 |
---|---|
싱글톤 컨테이너 (1) 등장배경, 정의, 주의사항 (0) | 2021.01.21 |
의존관계 주입(DI, Dependency Injection), DI 컨테이너 (0) | 2021.01.18 |
다형성과 스프링 (0) | 2021.01.14 |
스프링이란? (0) | 2021.01.14 |
- Total
- Today
- Yesterday
- 카카오
- 김영한
- java
- gracefulshutdown
- 토비
- ec2
- 스프링
- 자바
- 템플릿콜백
- 서비스추상화
- 코테
- 데코레이터패턴
- 토비의스프링
- 코딩테스트
- BOJ
- provider
- 백기선
- 프록시
- 객체지향
- 디자인패턴
- 프록시패턴
- 토비의봄TV
- c++
- OOP
- 프로그래머스
- SOLID
- 메서드레퍼런스
- 예외처리
- 자바스터디
- AOP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |