자바스크립트 Chain of Responsibility Pattern

2025. 4. 19. 09:27·Programing/javascript
반응형

Chain of Responsibility Pattern(책임 연쇄 패턴) 은 요청을 처리할 수 있는 여러 객체들이 체인 형태로 연결되어, 요청이 처리될 수 있는 객체에게 전달되도록 하는 행동 디자인 패턴입니다. 요청자는 누가 그 요청을 처리하는지 알 필요가 없습니다.


🧱 Chain of Responsibility Pattern이란?

이 패턴은 여러 처리 객체(Handler)를 연결된 체인으로 구성하고, 요청을 순차적으로 전달하여 처리 가능한 객체가 처리하도록 합니다. 각 객체는 다음 처리자에 대한 참조를 가지고 있으며, 처리 불가능할 경우 이를 다음 객체로 넘깁니다.

class Handler {
    setNext(handler) {
        this.next = handler;
        return handler;
    }
    handle(request) {
        if (this.next) {
            return this.next.handle(request);
        }
        return null;
    }
}

class AuthHandler extends Handler {
    handle(request) {
        if (request.user === "admin") {
            console.log("인증 성공");
            return super.handle(request);
        }
        console.log("인증 실패");
        return "권한 없음";
    }
}

class DataHandler extends Handler {
    handle(request) {
        if (request.type === "data") {
            console.log("데이터 처리 완료");
            return "데이터 응답";
        }
        return super.handle(request);
    }
}

const auth = new AuthHandler();
const data = new DataHandler();
auth.setNext(data);

const request = { user: "admin", type: "data" };
console.log(auth.handle(request));

✅ 장점

  1. 객체 간 결합도 낮음: 요청 처리자가 명확히 지정되어 있지 않음
  2. 유연한 구조: 처리자의 추가, 제거, 순서 변경이 쉬움
  3. 책임 분리: 각 처리자는 자신의 역할만 수행

❌ 단점

  1. 디버깅 어려움: 요청이 어디서 처리되었는지 추적이 복잡할 수 있음
  2. 성능 저하 우려: 처리자가 많을 경우 전달 시간이 증가
  3. 필수 처리자 누락 가능성: 모든 요청이 처리되지 않을 수도 있음

🛠️ 실전 예시: 결제 처리 체인

class PaymentHandler {
    setNext(handler) {
        this.next = handler;
        return handler;
    }
    handle(method) {
        if (this.next) {
            return this.next.handle(method);
        }
        return "결제 수단을 찾을 수 없습니다.";
    }
}

class CardPayment extends PaymentHandler {
    handle(method) {
        if (method === "card") {
            return "카드 결제가 진행됩니다.";
        }
        return super.handle(method);
    }
}

class KakaoPay extends PaymentHandler {
    handle(method) {
        if (method === "kakao") {
            return "카카오페이 결제가 진행됩니다.";
        }
        return super.handle(method);
    }
}

const card = new CardPayment();
const kakao = new KakaoPay();
card.setNext(kakao);

console.log(card.handle("kakao")); // 카카오페이 결제가 진행됩니다.

🧩 결론

Chain of Responsibility Pattern은 요청의 처리 책임을 유연하게 위임할 수 있어 복잡한 분기 로직, 유효성 검사, 결제 처리, 이벤트 필터링 등에 효과적입니다. 객체 간 결합도를 낮추고 책임을 분산시켜 구조적으로 안정된 설계를 가능하게 해줍니다.

반응형

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

한글만 입력 가능한 입력 필터링 jQuery (한글 + 영문 추가)  (1) 2025.04.21
자바스크립트 Flyweight Pattern  (1) 2025.04.19
자바스크립트 Bridge Pattern  (0) 2025.04.19
자바스크립트 Composite Pattern  (0) 2025.04.19
자바스크립트 Iterator Pattern  (0) 2025.04.19
자바스크립트 State Pattern  (1) 2025.04.19
자바스크립트 Strategy Pattern  (0) 2025.04.19
자바스크립트 Command Pattern  (0) 2025.04.19
'Programing/javascript' 카테고리의 다른 글
  • 자바스크립트 Bridge Pattern
  • 자바스크립트 Composite Pattern
  • 자바스크립트 Iterator Pattern
  • 자바스크립트 State Pattern
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (455) N
      • 금융 (61) N
      • Programing (279) N
        • Algorithm (38) N
        • API (2)
        • javascript (121)
        • CSS (6)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (17)
        • MS-SQL (1)
        • MySQL (12)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (5)
      • IT 일반 (15)
      • 리뷰 (37) N
        • Book (17)
        • 제품 (2) N
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (31)
        • 회고 (2)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    iT's MY LiFE
    It
    Java
    자바
    IT 관련
    IT블로그
    IT·컴퓨터
    블로그
    자바스크립트유틸
    jsp
    사고 싶은 책
    위시리스트
    기초
    JavaScript
    읽고 싶은 책
    디자인패턴
    자바스크립트
    js패턴
    SQL
    php
  • hELLO· Designed By정상우.v4.10.3
Dongkkase
자바스크립트 Chain of Responsibility Pattern
상단으로

티스토리툴바