Inversion of Control의 약자로 말 그대로 제어의 역전이다.
"내가 사용할 의존성은 내가 만든다!"
class SmapleController {
private final SampleService service = new SampleService();
}
일반적으로 사용자가 사용하는 객체는 사용자가 직접 생성하여 사용한다.
"내가 사용할 의존성은 타입만 일치하면 돼 누군가 알아서 해줘."
class SmapleController {
private final SampleService service;
public SampleController(SampleService service) {
this.service = service;
}
}
IoC는 다음과 같은 형태로 다른이에게 본인이 사용할 의존성을 본인이 관리하는게 아닌 다른 이에게 맡기는 형태이다.
이렇게 함으로써 사용자는 의존성을 관리를 맡김으로써 생성된 객체의 생명주기를 따로 신경 쓸 필요 없이 오직 비즈니스 로직에만 신경 쓸 수 있게된다!
위에서 말했던 의존성을 관리해주는 역할을 해주는 존재이다.
- 최상위 인터페이스는 BeanFactory로 되어있다.
- IoC 컨테이너안에 있는 빈들끼리만 의존성 주입을 해준다.
(물론 외부에도 의존성 주입이 가능은 하지만 굉장히 복잡하고 권장되지 않는 방법)
빈이란 IoC 컨테이너가 관리하는 의존성, 즉 객체들이다.