Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- class
- 게임
- cookie
- game
- flask
- GIT
- MySQL
- Nest.js
- 자료구조
- TypeScript
- MongoDB
- jest
- 정렬
- Bull
- Python
- dfs
- nestjs
- 공룡게임
- JavaScript
- AWS
- Sequelize
- Queue
- typeORM
- mongoose
- OCR
- Express
- Dinosaur
- react
- nodejs
Archives
- Today
- Total
포시코딩
4월3일 - Nest.js의 Class와 Factory 본문
728x90
Class와 Factory
Nest.js에서 Class와 Factory는 모두 컴포넌트를 정의하는 방법 중 하나이다.
공통적으로 의존성 주입(Dependency Injection)을 구현하는데 사용된다.
다만 목적과 사용 방법에서 차이가 있다.
Class
- 일반적으로 @Injectable() 데코레이터를 사용하여 Nest.js에게 해당 클래스가 컴포넌트임을 알린다.
- @Inject() 데코레이터를 사용하여 다른 컴포넌트에서 해당 클래스를 주입할 수 있다.
- 클래스는 한 번 정의되면 프로그램 전체에서 공유되며, 필요한 곳에서 인스턴스화 된다.
- 컴포넌트가 필요한 모든 곳에서 동일한 인스턴스를 공유해야 하는 경우에 사용된다.
- 생성자 인자를 통해 의존성을 주입받는다.
- 생성자에서 인스턴스화되는 서비스에 대한 참조를 쉽게 얻을 수 있으며, 코드의 가독성과 유지관리가 용이하다.
// AuthService 클래스 예시
import { Injectable, Logger } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { UsersService } from '../users/users.service';
@Injectable()
export class AuthService {
constructor(
private readonly usersService: UsersService,
private readonly jwtService: JwtService,
private readonly logger: Logger,
) {}
}
Factory
- Nest.js에서 팩토리를 사용하여 컴포넌트를 동적으로 생성할 수 있다.
- 일반적으로 @Injectable() 데코레이터와 @Inject() 데코레이터를 모두 사용한다.
- 팩토리는 컴포넌트가 필요한 시점에 호출되어 해당 컴포넌트를 생성하고 반환한다.
- 이렇게 생성된 컴포넌트는 해당 컴포넌트를 사용하는 모듈이나 컨트롤러 등에서 사용될 수 있다.
- 동적으로 컴포넌트를 생성해야하는 경우에 사용된다.
ex) DB 연결 등의 리소스가 필요한 경우 팩토리를 사용하여 컴포넌트를 생성하고, 컨트롤러에서 해당 컴포넌트를 사용 - 생성자 대신 팩토리 메서드를 사용해 객체를 생성한다. 팩토리를 사용하면 생성 로직을 더 잘 제어할 수 있으며, 클래스 내부에서 작동하지 않는 기능을 제공할 수 있다.
// AuthServiceFactory 예시
import { Injectable, Logger } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { UsersService } from '../users/users.service';
import { AuthService } from './auth.service';
@Injectable()
export class AuthServiceFactory {
createAuthService(): AuthService {
const usersService = new UsersService();
const jwtService = new JwtService();
const logger = new Logger('AuthService');
return new AuthService(usersService, jwtService, logger);
}
}
AuthServiceFactory는 createAuthService() 팩토리 메서드를 통해 AuthService 인스턴스를 생성한다.
createAuthService() 메서드는 UsersService, JwtService, Logger 등 AuthService 생성자의 의존성을 수동으로 해결한다.
팩토리를 사용하면 생성 로직을 더욱 세부적으로 제어할 수 있으므로 필요한 경우에만 사용하는 것이 좋다.
사용자 정의 프로바이더와 같은 고급 기능을 구현해야 하는 경우 팩토리를 사용하는 것이 좋은데,
일반적인 경우에는 그냥 클래스를 사용하는 것이 더 효율적이라고 한다.
참고한 곳
728x90
'Node.js' 카테고리의 다른 글
[Nest.js] applyDecorators - 작성중 (0) | 2023.04.06 |
---|---|
[Nest.js] passport, jwt를 통한 로그인 구현(1) - passport-local (0) | 2023.04.06 |
[Nest.js] Gateway와 socket.io (0) | 2023.04.02 |
[Nest.js] 모임 참여 - 동시성 문제 해결 과정 정리 with. Bull & Event-Emitter (0) | 2023.04.02 |
[Nest.js] CI/CD (0) | 2023.03.28 |