저는 해군나와서 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
하여 사용이 가능하다.