sayu.day
Research

데코레이터 (Decorator)

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

발행 2025년 12월 27일1158

같은 주제에서 이어 읽기

개체 지향 프로그래밍 (Object Oriented Programming)

Research 안에서 이어지는 글

용어를 먼저 분리

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

  • 디자인 패턴 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은 팀 숙련도 없으면 유지보수 비용이 큽니다.

요약

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

다음 읽기

이 생각이 이어지는 방향

Research 더 보기
공유

읽은 뒤의 대화

읽은 뒤의 생각을 이어갑니다

질문, 반론, 조용한 후속 메모를 이 글 아래에 남길 수 있습니다.

sayu.day는 생각과 작업의 흔적을 천천히 정리하는 개인 출판물입니다.
직접 겪고 검토한 내용, 다시 읽을 만한 아이디어, 작업하며 남긴 메모를 모읍니다.
시간이 지난 글은 현재의 판단과 다를 수 있어 업데이트 맥락을 함께 남깁니다.

© 2026 sayu.day