고급 TypeScript - 데코레이터: 매개변수 데코레이터
데코레이터: 매개변수 데코레이터
데코레이터는 TypeScript에서 클래스, 메서드, 접근자, 속성 및 매개변수에 대한 추가적인 메타데이터를 정의하고 수정할 수 있는 강력한 기능입니다. 매개변수 데코레이터는 특정 함수의 매개변수를 수정하거나 그에 대한 정보를 추가하는 데 사용됩니다. 이로 인해 코드의 가독성과 유지보수성이 향상되며, 다양한 기능을 쉽게 구현할 수 있습니다.
1. 매개변수 데코레이터란?
매개변수 데코레이터는 클래스의 메서드 또는 생성자의 매개변수에 적용됩니다. 이는 주로 다음과 같은 목적으로 사용됩니다:
- 메타데이터 추가: API 문서화 도구와 같은 외부 라이브러리가 사용할 수 있도록 정보를 제공합니다.
- 유효성 검사: 전달된 인자가 특정 조건을 충족하는지 확인합니다.
- 로깅: 함수 호출 시 어떤 인자가 전달되었는지를 기록합니다.
2. 기본 구문
매개변수 데코레이터는 다음과 같은 형식으로 정의됩니다:
function ParameterDecorator(target: any, propertyKey: string | symbol, parameterIndex: number) {
// 메타데이터 처리 로직
}
target
: 해당 메서드를 포함하는 객체(클래스)의 프로토타입입니다.propertyKey
: 해당 메서드의 이름입니다.parameterIndex
: 현재 처리 중인 매개변수가 위치한 인덱스입니다.
3. 예제
다음은 간단한 예제를 통해 매개변수 데코레이터를 사용하는 방법을 살펴보겠습니다.
function LogParameter(target: any, propertyKey: string | symbol, parameterIndex: number) {
const existingParameters = Reflect.getMetadata("log_parameters", target, propertyKey) || [];
existingParameters.push(parameterIndex);
Reflect.defineMetadata("log_parameters", existingParameters, target, propertyKey);
}
class UserService {
createUser(@LogParameter name: string) {
console.log(`User created with name: ${name}`);
}
}
// 사용자 생성 서비스 호출
const userService = new UserService();
userService.createUser("Alice");
위 코드에서 LogParameter
라는 이름의 매개변수 데코레이터가 정의되었습니다. 이 데코레이터는 로그를 위한 정보(여기서는 파라미터 인덱스)를 저장합니다.
이제 createUser
메서드를 호출하면 "User created with name" 메시지가 출력되고 로그 정보도 다른 곳에서 활용될 수 있게 됩니다.
4. 유용한 활용 사례
-
API 요청 검증:
- 클라이언트가 보낸 데이터가 올바른 형식인지 체크하기 위해 사용할 수 있습니다.
-
로그 기록:
- 각 함수 호출 시 어떤 값들이 사용되었는지를 자동으로 기록하여 디버깅이나 감사 용도로 활용할 수 있습니다.
-
메타데이타 관리:
- 스키마 기반 데이터베이스와 통합하여 모델 클래스를 자동으로 구성할 때 유용하게 쓰일 수 있습니다.
매개변수 데코레이터를 통해 TypeScript에서는 더욱 구조적이고 재사용 가능한 코드를 작성할 수 있으며 다양한 패턴을 적용하여 개발 효율성을 높일 수 있습니다.