

어플리케이션이 제공하는 서비스 기능을 구현하고 수행하는 역할 -> 레이어드 아키텍쳐에서의 서비스계층
app.service.ts가 바로 provider
여기에 메서드를 정의 @Injectable()을 사용
JS
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;
}
}
인터페이스를 만들어 사용
export interface Cat {
name: string;
age: number;
breed: string;
}
반드시 필요하지 않는 종속성이 있을 수 있음 이러한 경우 공급자가 없더라도 오류가 발생하지 않기때문에 종속성이 선택사항이 됨
공급자가 선택사항임을 나타내려면 @Optional()을 사용
import { Injectable, Optional, Inject } from '@nestjs/common';
@Injectable()
export class HttpService<T> {
constructor(@Optional() @Inject('HTTP_OPTIONS') private httpClient: T) {}
}
프로바이더는 의존성 주입이 가능하다
의존성 주입은 하나의 객체가 다른 객체의 의존성을 제공하는 것을 망한다
이를 통해 객체간의 결합도를 낮추고 코드의 재사용성과 테스트의 기능을 높일 수 있음
의존성이란 하나의 객체가 클래스나 다른 객체나 클래스를 필요로 하는 관계를 의미
public class Car {
private Engine engine;
public Car() {
this.engine = new Engine();
}
public void start() {
engine.run();
}
}
이렇게 하나의 클래스가 다른 클래스에 의존하고 한 객체가 정상적으로 작동하기 위해서는 다른 객체가 필요할때를 말한다