Inversion of Control
[Dependency Injection](https://texonom.com/dependency-injection-371cce0b0e994efe9020f5e1a776ea75) [Component Rule](https://texonom.com/component-rule-3e10c85d47804c46a72d658027db513d) 


## 재사용 가능한 컨포넌트를 위한 의존성 해결 방식
프로그래머가 작성한 프로그램이 재사용 라이브러리의 흐름 제어를 받게 되는 소프트웨어 디자인 패턴
전통적인 프로그래밍에서 흐름은 프로그래머가 작성한 프로그램이 외부 라이브러리의 코드를 호출해 이용한다. 하지만 제어 반전이 적용된 구조에서는 외부 라이브러리의 코드가 프로그래머가 작성한 코드를 호출
**콜백으로 라이브러리에 넘겨주는 방식으로 구현**
하거나 dependency inejction
This is a generic term, implemented in various ways (event, agents , etc.).

- 작업을 구현하는 방식과 작업 수행을 분리
### 제어의 역전
- 경량 컨테이너로 자바 객체를 담고 직접 관리
- 객체의 생성 및 소멸 그리고 라이프 사이클을관리
- 언제든 Spring 컨테이너로 부터 필요한 객체를 가져와 사용할 수 있다


### 일반적 OOP
- 객체 결정 및 생성 -> 의존성 객체 생성 -> 객채 내의 메소드 호출
- 모든 작업을 사용자가 제어하는 구조
### IOC
- 객체는 자기가 사용할 객체를 선택하거나 생성하지 않는다
- 자신의 모든 권한을 다른 대상에 위임함
- 제어권한을 위임받은 특별한 객체에 의해 결정되고 만들어짐
### IOC는 DI와 DL의 의해 구현됩니다



> [제어 반전 - 위키백과, 우리 모두의 백과사전](https://ko.wikipedia.org/wiki/%EC%A0%9C%EC%96%B4_%EB%B0%98%EC%A0%84)





