기존에 어떠한 서비스를 사용하고 싶으면 개발자가 객체 생성부터 소멸까지 직접 관리해야 했다.
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();
}
...
}
이렇게 직접 생성하면 의존하는 서비스가 변경되면 개발자도 그에 맞추어 코드를 수정해야함
constructor(private readonly appService: AppService) {} // 얼마나 편하게요~
icC를 수행하는 방법중 하나인대 개발자가 사용하고 싶은 객체를 직접 생성하는것이 아니라
객체의 생명주기 관리 자체를 외부에 위임 하는것.
즉 객체 관리를 컨테이너에 맡겨서 제어권이 넘어갔기에 제어 역전이라고 함.
예를들어 라이브러리/ 프레임워크로 예를 들수 있음
라이브러리:제어권이 나에게 있어서. 내 코드가 필요할떄마다 라이브러리 선택해서 사용
프레임워크:제어권이 프레임워크에게 있어서 나의 코드를 프레임워크가 필요로 하는 경우 알아서 실행시킴