
저는 해군나와서 Nest.js 공부할때 DI하면 이거부터 떠올랐읍니다
제어의 역전
개발자가 제어해야할 영역을 프레임워크에게 전적으로 맡기며, 애플리케이션의 동작방식을 프레임워크에 위임한다
우리는 Nest.js를 쓰기때문에 우리가 제어하던 영역을 Nest.js에게 넘긴다.
의존성 주입
아이가 초콜릿을 먹고싶을때 직접 편의점을 가서 사는게 아니라
초콜릿을 먹고싶다고 부모에게 말하면 그때 부모가 사와서 갖다 주는것
@Controller()
export class IController {
// 생성자에 의존성을 주입한다
constructor(
private readonly bumoService:BumoService
){}
// 사용한다면
order(){
return this.bumoService.orderChoco()
}
}
@Injactable, @Service등 데코레이터를 사용해 의존성주입을 사용한다
그리고, 일반적으로 의존성주입 대상은 싱글톤 패턴으로 만들어진다.
이는 데코레이터패턴에대한 이해도도 필요하단 의미
최종적으로, Nest.js는 IoC를 구현하기위해 DI를 사용하며, 어플리케이션이 실행 될 때, 클래스를 생성하기 위한 의존성을 생성하며 주입하는 코드들을 작동시킨다.
하나의 클래스는 오로지 하나의 인스턴스만을 가지도록 한다는 패턴
module 을 사용해서 injection 하는 패턴이 싱글톤패턴 export하여 사용이 가능하다.