고급 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에서는 더욱 구조적이고 재사용 가능한 코드를 작성할 수 있으며 다양한 패턴을 적용하여 개발 효율성을 높일 수 있습니다.

Subscribe to shimdh.log

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe