[NestJS] - 4. DI / IoC (의존성 주입/제어의 역전)
@Injectable()
데코레이터 사용constructor
를 통해 쉽게 요청하고 주입받아 사용할 수 있음<aside> 💡
@Injectable()
데코레이터는 메타데이터를 첨부하여 프로바이더가 NestJS의 IoC 컨테이너에 의해 관리될 수 있는 클래스임을 선언하는 것
@Injectable()
데코레이터가 붙은 클래스들은 NestJS의 IoC 컨테이너에 의해 주입 가능한 것으로 간주됨
</aside>컨트롤러는 url 라우팅을, 서비스는 비즈니스 로직을 관리하는 역할로 구분
인터페이스 생성
export interface Cat {
name: string;
age: number;
breed: string;
}
아래 명령어를 CLI에 입력하여 서비스 생성
nest g service cats
위 명령어 입력 시, 모듈 파일(app.module.ts
)의 @Module()
데코레이터의 providers
배열에 서비스가 자동으로 추가됨
import { Module } from '@nestjs/common';
import { CatsController } from './cats/cats.controller';
import { CatsService } from './cats/cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class AppModule {}
Controller와 관련된 메서드 작성
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';
@Injectable()
export class CatsService {
private readonly cats: Cat[] = [];
create(cat: Cat) {
this.cats.push(cat);
}
findAll(): Cat[] {
return this.cats;
}
}
@Injectable()
데코레이터 사용
CatsService
가 Nest의 IoC 컨테이너에 의해 관리될 수 있는 클래스임을 선언