1. 제어의 역전(IoC)
- 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버구현 객체를 생성하고 연결하고 실행하였다. 한마디로 구현 객체가 프로그램의 제어흐름을 스스로 조종하였음.
- AppConfig등장 이후, 구현객체는 자신의 로직을 실행하는 역할만을 담당함.
- 프로그램 제어에 대한 권한은 AppConfig에 위임.
- 프로그램의 제어 흐름은 클라이언트코드가 아닌 AppConfig(외부)에 의해 결정되는 것.
*프레임워크 vs 라이브러리 : 프레임워크는 실행 및 제어 권한을 가진다. 반면, 코드에서 제어의 흐름을 담당한다면 라이브러리에 해당.
2. 의존관계 주입 (DI)
- 의존관계는 "정적인 클래스 의존관계와 실행시점에 동적인 객체 의존관계"를 분리하여 생각하여야 한다.
* 정적인 클래스 의존관계
- import 코드만보아도 의존관계를 쉽게 판단할 수 있음.
- 애플리케이션을 실행하지 않고도 분석할 수 있는 의존관계를 지니고 있음.
* 동적인 객체 의존관계(실행시점에 결정)
- 어떤객체가 주입될지 실행이전까지는 알 수 없음
- AppConfig에서 객체주입을 결정하기때문.
- 객체인스턴스를 생성하고 그 참조값을 전달하여 연결됨.
* DI의 이점
- 의존관계 주입을 사용하면 클라이언트코드 변경 없이 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다.
- 정적클래스의존관계를 변경하지 않고 동적인 객체간의 의존관계를 쉽게 변경할 수 있다.
3. IoC 컨테이너, DI컨테이너
- AppConfig처럼 객체를 생성하고 관리하며 의존관계를 연결해주는 것.
- 의존관계 주입에 초점을 맞추어 DI컨테이너라고도 불림
- > AppConfig에 해당.
의존성 주입은 AppConfig에 의해 행해짐.
'SpringBoot' 카테고리의 다른 글
SpringBoot] BeanFactory, ApplicationContext (0) | 2021.02.17 |
---|---|
SpringBoot]스프링 컨테이너와 스프링 빈 (0) | 2021.02.17 |
스프링 : 객체지향 프로그래밍 설계원칙 [SOLID] (0) | 2021.02.16 |
스프링프레임워크 ] 빈+컨테이너, IoC패턴 (0) | 2021.02.04 |
서블릿 생명주기 (0) | 2021.02.04 |