의존성 주입 패턴 (Dependency Pattern)

controller.ts에 보면

import { Body, Controller, Get, Param, Req } from '@nestjs/common';
import { Request } from 'express';
import { AppService } from './app.service';

@Controller('cats')
export class AppController {
  constructor(private readonly appService: AppService) {}

  //* localhost:8000/cats/hello
  @Get('hello/:id/:name')
  getHello(
    @Req() req: Request,
    @Body() Body,
    @Param() param: { id: string; name: string },
  ): string {
    // console.log(req);
    console.log(param);
    return this.appService.getHello();
  }
}

appService 로 인스턴스를 생성하여 return this.appService.getHello(); 위와 같이 사용하는 것을 볼 수 있다.

이를 의존성 주입이라고 한다.

AppService 가 판매자 (생산자) 라고 한다면 AppController 는 소비자 (사용자) 가 되는 것이다.

그러면 제공자는 종속을 시킬 수 있다고 한다.

이게 무슨말이냐 요청이 오면, 제품의 공급자를 찾아가야 하는데 근데 공급자가 없으면 그러면 의존성이 망가지는 것이다.

이게 의존성에 종속된다고 하는 것이다.

그래서 AppService는 공급자라고 볼 수 있는 것이다.

공급자의 등록은 module.ts의

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

에서 provider 안에 하게 된다.

그래서 provider(공급자)의 의미를 가지는 것이라 볼 수 있는 것이다.

추가적으로..

service.ts 파일에 가보면

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

위와 같이 @Injectable 이라는 의미가 주입시킨다.

한마디로 의존성을 주입시킨다는 의미를 가지고 있음을 알면 된다.