티스토리 뷰

공부/디자인 패턴

Chain of Responsibility

-=HaeJuK=- 2025. 4. 22. 15:47
728x90
반응형
C++ 디자인 패턴 - Chain of Responsibility

📌 C++ 디자인 패턴 - Chain of Responsibility (책임 연쇄 패턴)

체인 패턴은 요청을 처리할 수 있는 객체들을 연결된 체인 형태로 구성하여, 요청을 처리할 수 있는 객체가 나타날 때까지 다음 객체로 전달하는 구조입니다. 객체 간 결합도를 낮추고 유연한 구조를 만드는 데 유용합니다.

🧩 구조

  • Handler: 요청 처리 인터페이스 정의
  • ConcreteHandler: 실제 요청을 처리하거나 넘기는 구현체
  • Client: 첫 Handler에 요청을 전달

🧪 예제 코드

1. 추상 핸들러

class Handler {
protected:
    Handler* next = nullptr;
public:
    void setNext(Handler* _next) { next = _next; }
    virtual void handle(int request) {
        if (next) next->handle(request);
    }
    virtual ~Handler() = default;
};

2. 실제 핸들러 A / B

class HandlerA : public Handler {
public:
    void handle(int request) override {
        if (request < 10) {
            std::cout << "HandlerA 처리: " << request << std::endl;
        } else {
            Handler::handle(request);
        }
    }
};

class HandlerB : public Handler {
public:
    void handle(int request) override {
        if (request < 20) {
            std::cout << "HandlerB 처리: " << request << std::endl;
        } else {
            Handler::handle(request);
        }
    }
};

3. 클라이언트 코드

int main() {
    HandlerA a;
    HandlerB b;

    a.setNext(&b);

    a.handle(5);    // HandlerA 처리
    a.handle(15);   // HandlerB 처리
    a.handle(25);   // 아무도 처리 안함

    return 0;
}

✅ 장점

  • 요청 처리 책임 분산
  • 핸들러 추가/변경 용이 (Open/Closed Principle)
  • 클라이언트는 처리 방식에 대해 알 필요 없음

⚠️ 단점

  • 디버깅이 어려울 수 있음 (처리 위치 추적 힘듦)
  • 너무 많은 핸들러는 오히려 복잡성 증가

🛠 사용 예시

  • UI 이벤트 처리 체계
  • 로깅 필터 체인
  • 권한 체인, 결재 시스템 등

728x90
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함