※ 본문은 김영한 선생님의 인프런 '스프링 핵심 원리 - 기본편' 강의를 듣고 정리한 내용임을 알립니다.
▶ AppConfig의 등장
Q. 애플리케이션을 공연이라고 가정하고 각각의 인터페이스를 배역이라고 했을 때,
배역을 맡는 배우는 누가 선택하는가?
→ 배우는 배역을 수행하는 '하나의 책임'에만 집중해야 하며, 공연을 구성하고 배우를 섭외해서 배역에 지정하는 책임을 담당하는 별도의 '공연기획자'가 필요!
→ AppConfig 클래스를 만들어서 구현 객체의 생성과 연결을 담당
→ 공연기획자인 AppConfig는 구체 클래스를 선택하고 배역에 맞는 배우를 선택
애플리케이션이 어떻게 동작해야 할지 전체 구성을 책임진다.
▶ IoC (Inversion of Control, 제어의 역전)
- AppConfig의 등장 이후 구현 객체는 자신의 로직을 실행하는 역할만 담당 / 프로그램 제어 흐름은 AppConfig에게
- 이렇듯, 프로그램의 제어 흐름을 직접 제어하는 것이 아닌 외부에서 관리하는 것을 IoC라고 부름
- 프레임 워크 VS 라이브러리 => 프레임 워크가 내가 작성한 코드를 제어하고, 대신 실행하면 그것은 프레임 워크가 맞다.(JUnit) 그러나 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 그것은 라이브러리다.
▶ DI (Dependency Injection, 의존관계 주입)
◈ '정적인 클래스 의존관계' / '실행 시점에 결정되는 동적인 객체(인스턴스) 의존관계'
- 정적인 클래스 의존관계 : 해당 클래스가 사용하는 'import' 코드만 보고 의존관계를 쉽게 판단할 수 있음
- 동적인 객체 인스턴스 의존관계 : 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 상태
→ 이처럼 실행시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결되는 것이 '의존관계 주입'
★ DI를 사용하면 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스를 쉽게 변경할 수 있다.
※ IoC 컨테이너, DI 컨테이너
- AppConfig처럼 객체를 생성하고 관리하면서 의존관계를 연결해주는 것을 일컫는 말
- 의존관계 주입에 초점을 맞추게 되면서 최근에는 주로 'DI 컨테이너'로 부름
- 어셈블리, 오브젝트 팩토리 등으로 불리기도 함
'JVM > Spring' 카테고리의 다른 글
ComponentScan과 의존관계 주입 방법에 대해서 (0) | 2021.03.24 |
---|---|
싱글톤 컨테이너 (0) | 2021.03.24 |
스프링 컨테이너와 스프링 빈 (0) | 2021.03.23 |
Spring이란 무엇인가 (0) | 2021.03.16 |
김영한 선생님의 스프링 입문 강의를 공부하고서 (0) | 2021.03.12 |