DI와 IoC란?

DI(Dependency Injection)란?

DI(Denpendency Injection)란 Spring 프레임워크에서 제공하는 기능 중 하나이다.
Java를 공부해왔던 사람들은 객체(class)에 포함된 property나 method를 사용하기 위해, (static이 아니라면)먼저 new로 객체생성을 해야 한다는 것을 알 것이다.
nomal_class

하지만 이런 방식은 객체에 의존성이 높아 코드의 유연성에 좋지 않다. 그래서 Spring에서는 DI 디자인패턴을 할 수 있도록 도와준다.
간단하게 DI는 외부에서 해당 객체(interface)에게 주입을 하고, 사용하는 패턴이다. 여기서 주입받는 레퍼런스(reference)는 Spring이 판단하여 주입하는 걸 도와준다. 이렇게 된다면, 인터페이스가 있기에 코드상 거리가 멀어져 의존성이 줄어들게 되며, 기능마다 주입하는 레퍼런스를 다르게 하는걸로 유연성 또한 높아진다.
DI_reference


IoC(Inversion of Control)란?

제어의 역전(IoC)란 의미를 해석하면 약간이나마 감을 잡을 수 있다. 제어를 다른이(제 3자)에게 넘기는 것이다.
순수 개발을 한다면, 개발자 본인이 객체를 생성, 삭제를 하여야 한다. 하지만 그것이 엄청 많다면? 100개가 넘는다면? 생산성에 비효율적이다. 그것을 감수 한다고 하여도 한 객체가 다른 객체를 생성, 삭제 등 여러 기능이 있는 것은 캡슐화(역할과 책임의 분리)를 위반하게 된다.
그리하여 이 수많은 객체의 생명주기(Life cycle)를 관리하기 위해 다른 3자에게 맡기는 것을 IoC라고 한다.
사실 IoC는 DI에서 범용적인 의미를 가지는 개념이다.
IoC_DI
출처:http://piyushramani8.blogspot.com/2013/07/inversion-of-control-ioc-vs-di.html

Spring에서는 IoC Container가 객체를 생성 의존성을 제어한다.
ApplicationContext는 BeanFactory라는 IoC Container의 기능을 정의하는 인터페이스를 상속받고 그 외, AOP(Aspect Oriented Programming), 이벤트, 메세지 처리 기능을 제공한다.

참고 : https://biggwang.github.io/2019/08/31/Spring/IoC,%20DI%EB%9E%80%20%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C/
https://gangnam-americano.tistory.com/60

댓글남기기