Nest.js에서 @Injectable() 데코레이터는 의존성 주입(Dependency Injection, DI)을
사용할 수 있도록 클래스에 적용하는 데코레이터입니다.
이 데코레이터를 통해 Nest.js는 해당 클래스를 Provider로 인식하고,
다른 클래스에서 필요할 때 의존성을 주입하여 사용할 수 있습니다.
의존성 주입은 객체가 다른 객체의 인스턴스에 의존할 때,
직접 해당 인스턴스를 생성하지 않고 외부에서 주입하는 설계 패턴입니다.
이를 통해 객체 간 결합도를 줄이고, 코드의 재사용성과 테스트 가능성을 높이는 장점이 있습니다.
Nest.js에서는 클래스 간 의존성을 관리하고 주입할 때 @Injectable()
데코레이터가 필수적으로 사용됩니다.
@Injectable() 데코레이터를 사용하면 해당 클래스는
Nest.js의 의존성 주입 시스템에서 Provider로 인식됩니다.
이를 통해 Nest.js는 이 클래스를 인스턴스화하고, 필요한 곳에 자동으로 주입할 수 있습니다.
@Injectable() 데코레이터가 적용된 클래스는 애플리케이션의 런타임 동안
Nest.js의 의존성 주입 컨테이너에 의해 관리됩니다.
Nest.js는 이 클래스의 인스턴스를 직접 생성하고 관리하며,
다른 클래스에서 해당 클래스가 필요할 때 주입해줍니다.
@Injectable()이 적용된 클래스를 다른 클래스에서 의존성으로 주입할 수 있습니다.
주입받는 클래스는 생성자에서 해당 클래스를 참조하게 되며,
이를 통해 필요한 메서드를 호출하거나 값을 사용할 수 있습니다.
import { Injectable } from '@nestjs/common';
@Injectable()
export class MyService {
getHello(): string {
return 'Hello, Nest!';
}
}
위의 예시에서 MyService 클래스는 @Injectable() 데코레이터로 감싸져 있습니다.
이로 인해 Nest.js는 이 클래스를 의존성 주입 시스템에서 사용할 수 있도록 관리합니다.
이제 MyService를 다른 클래스에 주입할 수 있습니다.
import { Controller, Get } from '@nestjs/common';
import { MyService } from './my-service';
@Controller('example')
export class ExampleController {
constructor(private readonly myService: MyService) {}
@Get()
getHello(): string {
return this.myService.getHello();
}
}
ExampleController 클래스는 생성자에서 MyService를 주입받고 있습니다.
Nest.js는 MyService의 인스턴스를 자동으로 생성하여
ExampleController의 생성자에 전달합니다.
Nest.js는 자체 DI 컨테이너를 통해 @Injectable() 데코레이터가 붙은 클래스를 관리합니다.
이 컨테이너는 Nest 애플리케이션이 시작될 때 모든 Provider를 스캔하고, 필요한 인스턴스를 생성하여 다른 클래스에 주입합니다.
@Injectable()은 Nest.js에서 클래스가 의존성 주입을 받을 수 있게 하는 데코레이터입니다.
의존성 주입을 통해 클래스 간 결합도를 낮추고 코드 재사용성과 테스트 가능성을 높입니다.
@Injectable() 데코레이터는 Provider로 사용할 클래스를 지정하는 역할을 합니다.