제어의 역전
AppConfig
가 프로그램의 제어 흐름을 가져감📌 Framework vs Library
- 프레임워크 : 내가 작성한 코드를 제어하고, 대신 실행함 (ex: JUnit)
- 라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 담당함
의존성 주입
애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계
Dependency Injection(의존관계 주입) : 애플리케이션 런타임(실행 시점)에 외부에서 실제 구현 객체를 생성하고, 클라이언트에 전달해서, 클라이언트와 서버의 실제 의존 관계가 연결되는 것
객체 인스턴스를 생성하고, 그 참조값을 전달해서 연결된다.
💡 의존관계 주입을 사용하면?
- 클라이언트 코드를 변경하지 않고, 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다.
- 정적인 클래스 의존관계를 변경하지 않고(Application 코드를 손 대지 않고), 동적인 객체 인스턴스의 의존관계를 쉽게 변경할 수 있다.
: AppConfig
처럼 객체를 생성하고 관리하면서 의존관계를 연결해주는 것
📌 모두 동의어!
- 의존관계 주입에 초점을 맞추어 최근에는 주로 DI 컨테이너라고 함!
- Assembler라고도 불림 (레고를 조립하듯이 해서)
- Object Factory라고도 불림 (오브젝트를 만들어낸다고 해서)