제어의 역전이란 객체는 객체가 의존하는 다른 객체를 스스로 생성하지 않고 외부로 부터 얻음을 의미한다.결합성(coupling)을 느슨하게하고 테스트,재사용성을 용이하게 하는 패턴이다.
IoC패턴의 구체적인 버전중 하나이다.객체가 작동하는데 필요한 구현체가 constructors/setters/service lookups을 통해 전달된다.
nestJs에서 의존성의 인스턴스생성은 Ioc컨테이터(NestJs런타임)에 위임한다.
앱시작시 모든 클래스를 DI컨테이너에 등록(클래스에 Injectable데코레이터 붙이고 module의 providers에 등록,controller는 controller 데코레이터로 DI컨테이너에 등록 및 인스턴스 생성) =>
컨테이너는 각 클래스의 의존성을 파악 =>
컨테이너는 각 클래스의 인스턴스 생성하고 제공(Nest가 자동으로 수행함)=>
생성된 인스턴스는 삭제되거나 재생성되지 않고 필요시 재사용됨
출처
https://stackoverflow.com/questions/3058/what-is-inversion-of-control
https://docs.nestjs.com/fundamentals/custom-providers