Inversion of Control
이전 글에서의 AppConfig의 역할을 떠올려보자.
기존에는 Client 코드에서 구현 객체를 생성하여 실행됐지만, AppConfig의 등장으로 Client 코드는 자신의 로직만 실행하게 됐다.
즉, 프로그램의 제어 흐름을 AppConfig가 가져갔다.
이렇듯, 프로그램의 제어 흐름을 직접 제어하는 것이 아닌 외부에서 관리하는 것을 제어의 역전(IoC)이라고 한다.
Dependency Injection
Client 코드는 Interface에 의존할 뿐, 프로그램 동작 시 어떤 구현 객체가 사용될지는 알 수 없다.
의존관계는 정적인 Class 의존관계와 동적인 객체 의존관계로 나뉘어진다.
의존관계 주입(DI)이란, 프로그램 실행 시점에 외부에서 객체를 Client에게 전달해 Client와 Server의 의존관계가 연결되는 것을 의미한다.
DI를 통해 정적인 Class 의존관계를 변경하지 않고 동적인 객체 의존관계를 변경할 수 있게된다.
IoC 컨테이너라고도 하나, 의존관계 주입에 초점을 맞추어 주로 DI 컨테이너라고 한다.
DI 컨테이너란, 객체를 생성하고 관리하며 의존관계를 연결해주는 것이다.
즉, AppConfig가 DI 컨테이너이다.