wooseobsssss 2023. 12. 21. 17:33

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  // 1. 사용하고 싶은 서비스 타입 객체를 미리 선언합니다.
  private appService: AppService
  
  constructor() {
    // 2. 생성자에서 실제로 사용할 서비스 객체를 직접 생성합니다.
    this.appService = new AppService();
  }
  ...
}

기존에는 이런 식으로 사용하고 싶은객체를 개발자가 생성부터 소멸까지 직접관리하는 방식


 

전통적인 방법의 한계

 

만약 서비스에 변경이 생기면 

 

개발자는 그에 맞춰서 코드를 수정해야한다. 


IOC의 등장과 장점

 

IOC(제어 역전)

 

IOC는 개발자가 사용하고 싶은 객체를 직접 생성하는것이 아니라 객체의 생명주기 관리자체를 외부에 위임

 

즉, 객체의 관리를 컨테이너에 맡긴다.

 


 

서비스 자체가 변경이 되어도 관계없이 사용이 가능한다.

그렇기에 수정 변경에서 훨씬 효율적인 장점을 갖고 있다.


  constructor(private readonly appService: AppService) {} // 살포시 연착륙

위의 코드는 Nest.js에서 제공하는 의존성 주입 (Dependency Injection, DI) 메커니즘을 사용하여 AppService를 AppController에 주입하는 예시입니다.

 

이러면서 IOC원칙이 구현됨

 

APPSERVICE는 우리가 만들게 아니라 NEST JS의 DI 컨테어너에 의해 생성되어 관리된다.

 

코드 결합을 낮추고 유연성과  테스트 용이성을 향상시킨다.