# 1.4 제어의 역전(IoC)

## 1.4.3 제어권의 이전을 통한 제어관계 역전

* 제어의 역전에서는 오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않는다.\
  -> 당연히 생성하지도, 또 자신도 어떻게 만들어지고 어디서 사용되는지 알 수 없다.
* 일반적인 자바 프로그램은 main() 메서드에서 시작해서 개발자가 미리 정한 순서를 따라 오브젝트가 생성되고 실행된다.
* 하지만, 서블릿의 실행을 개발자가 직접 제어할 수 있는 방법은 없다.\
  -> 서블릿에 대한 제어 권한을 가진 컨테이너가 적절한 시점에 서블릿 클래스의 오브젝트를 만들고 그 안에 메서드를 호출하는 것이다.
* **즉, 제어권을 상위 템플릿 메서드에 넘기고 자신은 필요할 때 호출되어 사용되도록 한다는 제어의 역전의 개념!**\
  \&#xNAN;**-> 스프링 컨테이너의 등록한 빈들이 어디서 사용되는지 각각은 알지 못한다..**
* 제어의 역전의 개념을 통해서 다음 2가지를 나눌 수 있다.
  * **라이브러리 : 라이브러리를 사용하는 애플리케이션 코드는 애플리케이션의 흐름을 직접 제어한다.**
  * **프레임워크 : 애플리케이션 코드가 프레임워크에 의해서 사용된다.**
