IOC, DI란?
IOC (Inversion of Control)
- 객체의 생성, 상호작용, 생명주기 등 관리를 개발자가 아닌 스프링 컨테이너에게 맡긴다.
- 개발자 -> 프레임워크로 제어의 객체관리 권한이 넘어갔음을 제어의 역전이라고 한다.
- 스프링 컨테이너를 IOC컨테이너로 부르기도 한다.
- 스프링에서는 이 IOC 개념을 통해 디펜던시 주입(DI: Dependency Injection)을 구현하여, 객체 간의 결합도를 낮추고 테스트하기 쉬운 프로그램을 만들 수 있다.
DI (Dependency Injection)
- DI(Dependency Injection)은 IOC(Inversion of Control)의 한 종류로, 제어의 역전이라는 뜻에서 상속된 개념이다.
- 의존성 주입(Dependency Injection, DI)은 소프트웨어 개발 과정에서 개발자가 직접 객체를 생성하지 않고, 프레임워크 또는 컨테이너에서 객체를 생성하고 개발자가 필요로 하는 곳에 주입하는 것을 말한다.
- 의존성 주입을 통해 개발자는 객체의 생성, 관계 설정 등의 작업을 프레임워크에 위임할 수 있어서, 코드의 가독성과 테스트 용이성이 높아지며, 개발 속도도 빠르게 증가한다.
Public class A{
private B b ;
public A(){
b = new B();
}
}
A 객체가 B에가 의존하고 있다 라는걸 개발자가 직접 설정해주었다
Public class A{
@Autowired
private B b;
@Autowired로 객체를 주입 받았다
B라는 객체가 스프링 컨테이너에게 관리되는 Bean이라면 @Autowired를 통해 객체를 주입받게 된다
스프링 컨테이너가 직접(제어) 객체를 생성하여 해당 객체에 주입시켜주었다
DI의 장점
- 유연한 구조: 객체는 자신이 종속적으로 가지는 다른 객체들을 외부에서 제공받아 사용하기 때문에 구조가 유연해집니다.
- 테스트 가능성 향상: 객체 간의 결합도가 낮아지기 때문에 각 객체를 따로 테스트하기 쉽습니다.
- 코드 간결성: 각 객체들이 서로의 의존성을 가지지 않기 때문에 코드가 간결해집니다.
- 개발 생산성 향상: 각 객체들이 독립적으로 개발될 수 있기 때문에 개발 생산성이 향상됩니다.
- 구조 변경 용이성: 종속적인 객체를 다른 객체로 변경하기 쉽습니다.