의존성 주입과 IoC 컨테이너
Nest.js에서 의존성 주입과 IoC 컨테이너는 애플리케이션의 모듈 간 의존성을 효율적으로 관리하기 위한 핵심 개념입니다. 이를 이해하려면 각각의 정의와 역할을 알아볼 필요가 있습니다.
1. 의존성 주입
정의
의존성 주입은 객체 간의 의존성을 외부에서 주입받는 방식으로 관리하는 디자인 패턴입니다.
일반적으로 객체는 스스로 필요한 의존성을 생성하거나 찾는 대신, 외부에서 제공받습니다.
장점
예제
의존성 주입 없이
class ServiceA {
sayHello() {
return 'Hello from ServiceA';
}
}
class Consumer {
private service: ServiceA;
constructor() {
this.service = new ServiceA(); // 직접 의존성을 생성
}
useService() {
return this.service.sayHello();
}
}
의존성 주입을 사용한 코드
class ServiceA {
sayHello() {
return 'Hello from ServiceA';
}
}
class Consumer {
constructor(private service: ServiceA) {} // 의존성을 외부에서 주입받음
useService() {
return this.service.sayHello();
}
}
// 의존성을 주입
const serviceA = new ServiceA();
const consumer = new Consumer(serviceA);
console.log(consumer.useService());
2. IoC 컨테이너
정의
IoC 컨테이너는 애플리케이션의 객체 생성 및 의존성 관리를 담당하는 컴포넌트입니다.
컨테이너는 객체를 직접 생성하고 필요한 의존성을 주입합니다.
Nest.js에서 IoC 컨테이너의 역할
Nest.js는 IoC 컨테이너를 사용하여:
작동 방식
예제
import { Injectable } from '@nestjs/common';
@Injectable()
export class ServiceA {
sayHello() {
return 'Hello from ServiceA';
}
}
import { Injectable } from '@nestjs/common';
import { ServiceA } from './service-a';
@Injectable()
export class Consumer {
constructor(private readonly serviceA: ServiceA) {} // 의존성을 IoC 컨테이너에서 주입받음
useService() {
return this.serviceA.sayHello();
}
}