IoC(Inversion of Control)
IoC는 번역하면 제어의 역전 이라는 뜻이다.
일반적인 프로그램은 자신이 사용할 오브젝트를 직접 선택하고 생성한다. ex) new Class();
오브젝트의 대한 제어권을 자신이 가지고 있는 능동적인 상태인 것이다.
하지만 스프링에서는 프로그램의 흐름을 프레임워크가 주도하게 된다. ex) @Autowired 등으로 Bean을 자동 주입
즉, 제어권이 컨터에너로 넘어가게 되고 이것을 제어권의 흐름이 바뀌었다고 해서 IoC(Inversion of Control : 제어의 역전)이라고 한다.
제어권이 컨테이너로 넘어옴으로써 DI(의존성 주입), AOP(관점 지향 프로그래밍)등이 가능하게 된다.
DI(Dependency Injection)
DI는 번역하면 의존성 주입 이라는 뜻이다.
객체간의 의존성을 자신이 아닌 외부에서 주입하는 개념이다.
객체지향에서 의존하고 있다라는 의미는 하나의 오브젝트에서 다른 오브젝트를 사용할때를 말한다.
A라는 클래스에서 B라는 클래스를 사용할 경우 A클래스는 B클래스에 의존하고 있다고 표현한다.
B클래스를 생성해서 A클래스에 넣어주는 과정, 이를 의존성 주입이다.
주입은 제 3자가 해준다. IoC의 개념이다. 결국 DI는 IoC의 세부적인 개념이다!.