tsyringe는 TypeScript용 의존성 주입(DI) 라이브러리이다.
이 라이브러리를 사용하면 클래스를 좀 더 모듈화하고 코드의 테스트 가능성을 높일 수 있다.
@inject는 tsyringe에서 제공하는 데코레이터 중 하나로 의존성을 주입할 때 사용된다. 이 데코레이터는 클래스의 생성자에 특정 의존성을 주입할 수 있도록 도와준다. 주로 의존성을 수동으로 연결하는 대신 자동으로 해당 의존성을 연결해 준다.
@inject의 주요 기능:
- 특정 토큰 또는 클래스 주입: @inject를 사용하면, 생성자나 클래스에 필요한 의존성을 주입할 때 주입할 객체를 직접 지정할 수 있다. 이때 주입할 의존성은 클래스 자체나 다른 키(Token)로 지정할 수 있다.
[기본 사용 예시]
import { injectable, inject } from 'tsyringe';
@injectable()
class ServiceA {
doSomething() {
console.log('Service A');
}
}
@injectable()
class Client {
constructor(@inject(ServiceA) private serviceA: ServiceA) {}
useService() {
this.serviceA.doSomething();
}
}
// 의존성 주입을 통해 클라이언트를 생성하고 사용할 수 있다.
const client = container.resolve(Client);
client.useService(); // 'Service A' 출력
위의 예시에서 Client 클래스는 ServiceA를 의존성으로 주입받는다. @inject(ServiceA) 데코레이터는 ServiceA 인스턴스를 자동으로 주입해 준다.
2. 토큰 기반 의존성 주입
때로는 클래스가 아닌 **토큰(Token)**을 기반으로 의존성을 주입할 수도 있다. 이는 인터페이스나 여러 구현체가 있을 때 유용하다.
const SERVICE_TOKEN = "SERVICE_TOKEN";
@injectable()
class ServiceB {
doSomething() {
console.log('Service B');
}
}
container.register(SERVICE_TOKEN, { useClass: ServiceB });
@injectable()
class ClientB {
constructor(@inject(SERVICE_TOKEN) private service: ServiceB) {}
useService() {
this.service.doSomething();
}
}
const clientB = container.resolve(ClientB);
clientB.useService(); // 'Service B' 출력
여기서는 SERVICE_TOKEN이라는 문자열 토큰을 기반으로 ServiceB가 의존성으로 주입되었다.
@inject의 주요 특징:
- 주입 대상 지정: 어떤 의존성을 주입할지 명확하게 지정할 수 있습니다. 클래스나 인터페이스, 또는 커스텀 토큰을 통해 주입 가능하다.
- 자동 의존성 주입: tsyringe는 필요한 의존성을 자동으로 찾아 주입해 준다. 이를 통해 수동으로 의존성을 관리하는 번거로움을 줄일 수 있다.
@inject는 주입할 의존성을 명확하게 지정하고, 의존성 관리의 복잡성을 줄여준다. 이를 통해 코드를 더 쉽게 확장 가능하고 테스트하기 쉽게 만들어준다.
'Front' 카테고리의 다른 글
[ts] Object를 Class로 변환 (class-transformer) (0) | 2024.10.11 |
---|---|
왜 Vue.js에서 tsyringe를 사용하는가 (1) | 2024.10.10 |
[Vue] intellij 실행 (0) | 2024.08.27 |