서론
DI와 IoC의 정의
DI(Dependency Injection)
DI는 객체가 자신의 의존성을 직접 생성하지 않고 외부에서 주입받는 디자인 패턴이다. 이는 코드의 재사용성을 높이고, 테스트를 용이하게 하며, 의존성 관리를 효율적으로 할 수 있게 한다.
- 의존성(Dependency): 객체가 기능을 수행하기 위해 필요한 다른 객체를 뜻함
- 주입(Injection): 필요한 객체를 외부에서 제공하는 과정이다.
IoC(Inversion of Control)
IoC는 프로그램의 제어 흐름을 개발자가 아닌 외부의 프레임워크나 컨테이너가 제어하는 디자인 원칙이다.전통적인 방식에서는 프로그램의 흐름을 개발자가 직접 관리하지만, IoC를 사용하면 이 흐름을 컨테이너가 관리하게 된다. ex) 스프링, Nest.js
- 제어의 역전(Inversion of Control): 제어권이 개발자에서 프레임워크나 컨테이너로 넘어가는 것을 의미함
- IoC 컨테이너: 객체의 생성과 라이프사이클을 관리하는 도구이다.
예시
// 외부에서 new ProductService, new CashService 객체를 선언하여 const productService = new ProductService(); const cashService = new CashService(); // 넘겨준다. const productController = new ProductController(productService, cashService); app.post('/products/buy', productController.buyProduct); app.post('/products/refund', productController.refundProduct);
// ProductController.js export class ProductController { productService; cashService; constructor(productService, cashService) { this.productService = productService; this.cashService = cashService; } .... }; }
위의 코드처럼 의존성 주입을 Ioc에서는 자동으로 해준다.
댓글