Programing/javascript

자바스크립트 Decorator Pattern

2025. 4. 19. 09:00
반응형

Decorator Pattern(데코레이터 패턴) 은 기존 객체에 새로운 기능을 동적으로 추가할 수 있게 해주는 구조 디자인 패턴입니다. 클래스나 함수를 수정하지 않고도 기능을 확장할 수 있어 유지보수성과 유연성이 매우 높습니다.


🧱 Decorator Pattern이란?

Decorator Pattern은 기존 객체를 감싸는(wrapper) 방식으로 기능을 확장하는 구조입니다. 자바스크립트에서는 고차 함수나 클래스 기반의 데코레이터를 통해 쉽게 구현할 수 있습니다.

function coffee() {
    return '커피';
}

function withMilk(beverage) {
    return function () {
        return beverage() + ' + 우유';
    };
}

function withSugar(beverage) {
    return function () {
        return beverage() + ' + 설탕';
    };
}

const milkCoffee = withMilk(coffee);
const sweetMilkCoffee = withSugar(milkCoffee);

console.log(sweetMilkCoffee()); // 커피 + 우유 + 설탕

✅ 장점

  1. 유연한 기능 확장: 객체나 함수 자체를 변경하지 않고 기능 추가 가능
  2. 조합 가능성: 여러 데코레이터를 조합하여 다양한 기능 생성 가능
  3. 단일 책임 원칙 준수: 각 기능이 분리되어 있어 유지보수에 유리함

❌ 단점

  1. 구조 파악이 어려움: 데코레이터가 많아질수록 실행 흐름을 파악하기 어려움
  2. 디버깅 어려움: 디버깅 시 원본 객체와 감싸는 객체 사이를 추적하기 힘듦
  3. 남용 시 복잡도 증가: 단순한 기능에도 과도한 래핑을 사용할 수 있음

🛠️ 실전 예시: 로그인 기능 데코레이터

function login(user) {
    return `${user} 로그인 완료`;
}

function logDecorator(fn) {
    return function (...args) {
        console.log('로그 기록:', ...args);
        return fn(...args);
    };
}

function authDecorator(fn) {
    return function (user) {
        if (user !== 'admin') return '접근 거부';
        return fn(user);
    };
}

const secureLogin = authDecorator(logDecorator(login));
console.log(secureLogin('admin'));  // 로그인 성공
console.log(secureLogin('guest'));  // 접근 거부

🧩 결론

Decorator Pattern은 기존 구조를 건드리지 않고도 기능을 추가할 수 있어 매우 강력한 패턴입니다. 특히 단일 책임 원칙(SRP) 을 지키면서도 조합 가능한 아키텍처를 만들 수 있는 장점이 있습니다. 다만 구조가 복잡해지기 쉬우므로, 기능 단위로 명확하게 분리해 사용하는 것이 중요합니다.

반응형

'Programing > javascript' 카테고리의 다른 글

자바스크립트 Observer Pattern  (0) 2025.04.19
자바스크립트 Adapter Pattern  (0) 2025.04.19
자바스크립트 Proxy Pattern  (0) 2025.04.19
자바스크립트 Facade Pattern  (0) 2025.04.19
자바스크립트 Module Pattern  (0) 2025.04.19
자바스크립트 Builder Pattern  (0) 2025.04.19
자바스크립트 Prototype Pattern  (1) 2025.04.19
자바스크립트 Singleton Pattern  (0) 2025.04.19
'Programing/javascript' 카테고리의 다른 글
  • 자바스크립트 Proxy Pattern
  • 자바스크립트 Facade Pattern
  • 자바스크립트 Module Pattern
  • 자바스크립트 Builder Pattern
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    사고 싶은 책
    블로그
    자바
    자바스크립트
    디자인패턴
    위시리스트
    It
    js패턴
    IT블로그
    JavaScript
    Java
    IT·컴퓨터
    iT's MY LiFE
    IT 관련
    jsp
    php
    기초
    SQL
    자바스크립트유틸
    읽고 싶은 책
Dongkkase
자바스크립트 Decorator Pattern
상단으로

티스토리툴바