고급 TypeScript - 데코레이터: 메서드 데코레이터
데코레이터: 메서드 데코레이터
데코레이터는 클래스의 속성이나 메서드, 접근자에 대한 추가적인 기능을 제공하는 특별한 종류의 함수입니다. TypeScript에서는 이러한 디코레이터를 사용하여 코드의 재사용성과 가독성을 높이고, 특정 로직을 간결하게 구현할 수 있습니다.
메서드 데코레이터란?
메서드 데코레이터는 클래스의 메서드를 수정하거나 추가적인 행동을 정의하기 위해 사용됩니다. 이들은 주로 로깅, 권한 검사, 성능 측정 등 다양한 목적으로 활용될 수 있습니다.
기본 구조
메서드 데코레이터는 다음과 같은 형식을 가집니다:
function 로그(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Calling ${String(propertyKey)} with arguments: ${args}`);
return originalMethod.apply(this, args);
};
return descriptor;
}
- target: 해당 메서드를 소속하고 있는 클래스.
- propertyKey: 메서드 이름.
- descriptor: 메서드에 대한 프로퍼티 설명자.
위 예제에서 로그
라는 이름의 메서드 데코레이터가 정의되었습니다. 이 데코레이터는 원래의 메서드를 호출하기 전에 인자를 콘솔에 출력합니다.
실제 예시
이제 위에서 정의한 로그
데코레이터를 사용하는 방법을 살펴보겠습니다:
class 계산기 {
@로그
더하기(a: number, b: number): number {
return a + b;
}
@로그
빼기(a: number, b: number): number {
return a - b;
}
}
const calc = new 계산기();
console.log(calc.더하기(5, 3)); // Calling 더하기 with arguments: 5,3
// 결과 : 8
console.log(calc.빼기(10, 4)); // Calling 빼기 with arguments: 10,4
// 결과 : 6
위 코드에서 계산기
클래스에는 두 개의 메서드 (더하기
, 빼기
)가 있으며 각 메서드는 @로그
라는 데코레이터로 장식되어 있습니다. 이로 인해 각 호출 시 인자가 로그에 기록되고 그 후 원래 동작이 수행됩니다.
활용 사례
-
로깅:
- API 요청 및 응답 시간을 기록하여 성능 분석 가능.
-
권한 검사:
- 특정 역할이나 권한이 있는지 확인하여 접근 제어 구현 가능.
-
캐싱:
- 이전 결과를 저장하고 동일한 입력 값으로 호출 시 캐시된 값을 반환하도록 설정 가능.
-
데버깅:
- 개발 중 오류 추적 및 문제 해결을 위한 유용한 정보를 출력할 수 있음.
메소드 데코레이터는 이러한 방식으로 코드를 더욱 깔끔하고 관리하기 쉽게 만들어 줍니다. 이를 통해 반복되는 코드를 줄이고 비즈니스 로직과 부가적인 기능들을 분리할 수 있어 유지 보수성이 향상됩니다.
결론
TypeScript에서 메소드 데코레이터는 강력한 도구이며 잘 활용하면 애플리케이션 설계를 개선하는데 큰 도움이 됩니다. 다양한 상황에 맞게 커스터마이징 할 수 있으므로 여러 가지 패턴과 기법들을 적용해 보는 것이 좋습니다!