[typescript] 객체에 추가적인 책임을 동적으로 부여하는 데코레이터 패턴과 타입스크립트의 결합 사례
데코레이터 패턴 소개
데코레이터 패턴은 객체에 추가적인 책임을 동적으로 부여할 수 있는 구조적인 디자인 패턴입니다. 예를 들어, 새로운 기능을 추가하거나 기존 기능을 수정하지 않고 객체의 동작을 확장하고 싶을 때, 데코레이터 패턴을 사용할 수 있습니다. 이 패턴은 객체를 감싸는 방식으로 동작하며, 객체를 감싼 데코레이터는 기존 객체에 영향을 미치지 않으면서 원하는 동작을 추가할 수 있습니다.
타입스크립트에서의 데코레이터 사용
타입스크립트는 자바스크립트에 타입을 부여하는 오픈 소스 언어입니다. 타입스크립트는 ES6에서 추가된 데코레이터를 지원하며, 클래스, 메서드, 프로퍼티 등에 데코레이터를 적용하여 동적으로 추가적인 책임을 부여할 수 있습니다.
function Logger(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`${propertyKey} 메서드 호출됨`);
return originalMethod.apply(this, args);
};
return descriptor;
}
class User {
@Logger
greet(name: string) {
return `Hello, ${name}!`;
}
}
const user = new User();
user.greet('John');
위 예시에서 Logger
데코레이터는 greet
메서드를 감싸어 호출될 때 로그를 출력하도록 확장합니다.
동적으로 객체에 책임 부여하는 데코레이터 패턴의 장점
데코레이터 패턴은 객체의 기능을 동적으로 확장해야 할 때 유용합니다. 이를 통해 기존 코드에 손상을 주지 않고 새로운 기능을 추가할 수 있습니다. 또한, 데코레이터는 단일 책임 원칙을 지키면서 코드를 확장할 수 있게 도와줍니다.
결론
데코레이터 패턴과 타입스크립트의 결합은 객체지향 디자인과 타입 안전성을 결합하여 동적으로 객체에 책임을 부여하는 데 효과적입니다. 이를 통해 유연하고 모듈화된 코드를 작성할 수 있습니다.
참고 자료
- 타입스크립트 핸드북 - 데코레이터
- “Head First Design Patterns” by Eric Freeman and Elisabeth Robson, O’Reilly Media, 2004