의존성 주입 패턴 (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 이라는 의미가 주입시킨다.
한마디로 의존성을 주입시킨다는 의미를 가지고 있음을 알면 된다.