IoC ( Inversion of Control )란?
public Class A {
private B b;
public A() {
b = new B();
}
}
public class A {
@Autowired
private B b;
}
위 코드는 B 객체가 스프링 컨테이너에 등록되어 관리되고 있는 Bean이라면 Autowired 어노테이션을 통해 개발자가 직접 객체를 관리하지 않고 스프링 컨테이너가 객체를 생성하여 해당 객체에 주입 시키는 코드이다.
원래라면 개발자가 객체를 제어하지만 스프링 컨테이너라는 외부로 제어의 결정권을 넘긴 것이다. 이것을 IoC (제어의 역전) 라고 한다.
IoC는 왜 사용할까?
그렇다면 DI (Dependency Injection)란 무엇인가?
결론
결론적으로 IoC는 소프트웨어 세계에서 자주 발견할 수 있는 제어의 역전이라는 개념으로, 응집도는 높이고 결합도는 낮추어 클래스간의 의존성을 최소화함으로써 유지보수나 변경에 대해 유연하게 대응할 수 있다는 장점을 가지고 있는 디자인 패턴이다.
DI는 이러한 IoC의 개념을 스프링에 맞게 새롭게 정의한 것으로 스프링이 실행될 때 모든 의존성 객체를 싱글톤 패턴으로 만들어주고 필요한 곳에 주입시켜 제어의 흐름을 스프링에게 맡겨 IoC가 가진 장점을 그대로 가지는 디자인 패턴이다.