Kim Seogyu
Research

데코레이터 (Decorator)

Decorator 패턴과 TypeScript 데코레이터의 차이, 그리고 실무 적용 시 주의점을 정리합니다.

Published 2025년 12월 27일1 min read160 words

데코레이터 (Decorator)

용어를 먼저 분리

실무에서 "데코레이터"는 두 의미로 쓰입니다.

  • 디자인 패턴 Decorator: 객체 기능을 런타임에 감싸 확장
  • 언어 기능 Decorator(TypeScript): 클래스/메서드에 메타데이터나 동작 주입

둘은 이름만 같고 목적이 다릅니다.

1) 디자인 패턴 Decorator

기존 객체를 감싸 부가 기능(로깅, 캐시, 인증)을 붙입니다. 원본 코드 수정 없이 조합 가능한 것이 장점입니다.

2) TypeScript Decorator

function log(target: any, key: string, descriptor: PropertyDescriptor) {
  const original = descriptor.value;
  descriptor.value = function (...args: any[]) {
    console.log(`[${key}]`, args);
    return original.apply(this, args);
  };
}

class UserService {
  @log
  find(id: string) {
    return { id };
  }
}

평가 순서(복수 데코레이터):

  • 표현식 평가: 위 -> 아래
  • 실제 적용: 아래 -> 위

실무 주의점

  • 런타임 메타프로그래밍은 디버깅 난이도를 올립니다.
  • 공통 관심사는 미들웨어/인터셉터로 대체 가능한지 먼저 검토합니다.
  • 데코레이터 기반 DI/validation은 팀 숙련도 없으면 유지보수 비용이 큽니다.

요약

데코레이터는 강력하지만 투명성이 떨어질 수 있습니다. "보이지 않는 동작"이 늘어나는 순간부터 테스트와 문서화 규칙이 필수입니다.

Share

Related Articles

Comments

이 블로그는 제가 알고 있는 것들을 잊지 않기 위해 기록하는 공간입니다.
직접 작성한 글도 있고, AI의 도움을 받아 정리한 글도 있습니다.
정확하지 않은 내용이 있을 수 있으니 참고용으로 봐주세요.

© 2026 Seogyu Kim