IoC

- 어떤 객체를 사용하는 객체가 그 객체를 직접 생성하는 것이 아닌 OrderContext라고 하는 객체(스프링 컨테이너)에서 생성을 다 해주고, 관계를 맺어주는 것을 해줌. 이것이 제어의 역전
- 객체 생성, 객체 관계맺는 것에 대한 권한을 위임하는 것
- OrderService에서도 어떠한 OrderRepository를 선택할지, 어떤 VoucherService를 생성할지 직접 하지 않음. OrderContext에서 다 알아서 해줌
- IoC를 가능하게 하는 공간, 장소를 IoC 컨테이너. OrderContext가 일종의 IoC 컨테이너
- 개별 객체들의 의존관계 설정이 이루어짐
- 객체들의 생성과 파괴를 모두 관장함
- IoC컨테이너에 이런 클래스 사용할 거다 라고 알려주면 객체화 시키면서 생성에 대한 필요한 의존관계를 맺어줌
- 라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어하지만 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용됨. 프레임워크가 흐름을 주도하면서 개발자가 만든 애플리케이션 코드를 사용하는 것.