오늘은 제어 역전과 의존성 주입에 대해 정리해보려 한다.
IoC 원칙은 모듈 간 결합도를 낮추기 때문에 하나의 모듈이 변경되어도 다른 모듈들에는 영향을 최소화되어 웹 어플리케이션을 지속 가능하고 확장성 있게 해준다.
IoC 원칙을 사용하면, AppController는 AppService의 구체적인 구현보다는 인터페이스나 추상 클래스에 의존하게 된다. 즉, 서비스 자체가 변경되어도 관계 없이 사용할 수 있다는 뜻.
이로 인해 코드의 결합도가 감소하고, 다른 구현체로 쉽게 교체할 수 있게 된다.
constructor(private readonly appService: AppService) {}
위의 코드는 Nest.js에서 제공하는 의존성 주입 (Dependency Injection, DI) 메커니즘을 사용하여 AppService를 AppController에 주입하는 예시이다.
constructor(private readonly appService: AppService)
에서, AppService의 인스턴스는 Nest.js의 DI 컨테이너에 의해 생성되고 관리된다.
따라서, 개발자는 직접 new AppService()와 같이 객체를 생성하거나 관리할 필요가 없게 되고, 이는 코드의 결합도를 낮추고, 유연성과 테스트 용이성을 향상시킨다.