JAVA

JAVA 디자인패턴 - 체인 오브 리스폰시빌리티(Chain of Responsibility) 패턴의 정의, 장점, 구현

TECH 톡마스터 2023. 7. 17.

[ 목차 ]

    JAVA 디자인패턴 - 체인 오브 리스폰시빌리티(Chain of Responsibility) 패턴의 정의, 장점, 구현
    JAVA 디자인패턴 - 체인 오브 리스폰시빌리티(Chain of Responsibility) 패턴의 정의, 장점, 구현

     

    안녕하세요, 여러분! 오늘은 꾸준히 관심을 받고 있는 자바 디자인 패턴 중 하나인 체인 오브 리스폰시빌리티(Chain of Responsibility) 패턴에 대해 이야기해보려 합니다. 어떤 문제를 해결하거나 최적화된 구조를 지원하는 디자인 패턴들이 있지요. 그렇다면 체인 오브 리스폰시빌리티 패턴은 어떤 장점이 있는지, 어떻게 구현되는지 함께 알아봅시다!

     

    체인 오브 리스폰시빌리티 패턴의 이해

    1. 체인 오브 리스폰시빌리티 패턴의 개념

    체인 오브 리스폰시빌리티 패턴은 객체들을 일렬로 연결하는 구조로, 요청한 작업을 연결된 객체들이 차례차례 확인하며 처리합니다. 즉, 한 객체가 요청을 처리할 책임이 있지만 그 객체가 처리할 수 없는 경우 다음 객체에게 전달하는 구조입니다.

    2. 적용 시기와 장점

    이 패턴은 다음과 같은 경우에 적용할 수 있습니다.

    • 요청을 처리할 수 있는 객체가 여러 개일 때
    • 요청 처리가 여러 단계로 이루어질 때
    • 요청을 처리하는 객체를 동적으로 지정하고 싶을 때

    이 패턴의 장점은 다음과 같습니다.

    • 객체 간의 결합도를 낮춰 유연한 요청 처리 구조를 구현할 수 있습니다.
    • 요청 처리 객체를 런타임에 정할 수 있어 확장성이 좋습니다.

    3. 구현 방법 및 예시

    체인 오브 리스폰시빌리티 패턴을 구현하는 방법은 다음과 같습니다.

    • 핸들러 인터페이스를 정의합니다.
    public interface Handler {
        void setNextHandler(Handler nextHandler);
        void handleRequest(String request);
    }
    • 핸들러 인터페이스를 구현하는 구체적인 핸들러 클래스들을 작성합니다.
    public class ConcreteHandlerA implements Handler {
        private Handler nextHandler;
    
        @Override
        public void setNextHandler(Handler nextHandler) {
            this.nextHandler = nextHandler;
        }
    
        @Override
        public void handleRequest(String request) {
            if (request.equals("A")) {
                System.out.println("ConcreteHandlerA 처리");
            } else {
                if (nextHandler != null) {
                    nextHandler.handleRequest(request);
                }
            }
        }
    }
    
    public class ConcreteHandlerB implements Handler {
        private Handler nextHandler;
    
        @Override
        public void setNextHandler(Handler nextHandler) {
    	this.nextHandler = nextHandler;
        }
    
        @Override
        public void handleRequest(String request) {
            if (request.equals("B")) {
                System.out.println("ConcreteHandlerB 처리");
            } else {
                if (nextHandler != null) {
                    nextHandler.handleRequest(request);
                }
            }
        }
    }
    • 핸들러 객체들을 연결하고 클라이언트에게 이용할 수 있도록 합니다.
    public class Main {
        public static void main(String[] args) {
            Handler handlerA = new ConcreteHandlerA();
            Handler handlerB = new ConcreteHandlerB();
            handlerA.setNextHandler(handlerB);
    
            handlerA.handleRequest("A");
            handlerA.handleRequest("B");
        }
    }

    예를 들어, 서로 다른 처리 단계를 거치며 이메일을 필터링하는 시스템에서 이 패턴을 적용할 수 있습니다. 각각의 필터링 조건을 핸들러로 구현한 뒤 연계시키면, 이메일이 핸들러 체인을 따라가며 조건에 맞게 처리됩니다.

     

    이렇게 알아본 체인 오브 리스폰시빌리티 패턴은 객체 간의 결합도를 낮추어 유연한 프로그래밍을 가능케 하며, 확장성이 높아 다양한 시스템에서 요청 처리 구조를 쉽게 구현할 수 있습니다. 이 패턴을 활용하여 여러분의 프로젝트에도 시너지를 발휘할 수 있기를 바랍니다. 앞으로도 많은 디자인 패턴에 대한 이야기를 나눠보며 개발 지식을 함께 성장시켜 나가겠습니다. 감사합니다!

     

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 어댑터(Adapter) 패턴

     

    디자인패턴 - 어댑터(Adapter) 패턴

    [ 목차 ] 안녕하세요. 오늘 알아볼 패턴은 어댑터(Adapter) 패턴입니다. 1. 어댑터(Adapter) 패턴 이란? 어댑터 패턴은 디자인 패턴 중 하나로, 서로 다른 인터페이스를 가진 클래스 또는 객체를 협력할

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 싱글톤(Singleton) 패턴

     

    디자인패턴 - 싱글톤(Singleton) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴 [ 목차 ] 안녕하세요. 자바에는 다양한 디자인 패턴이 존재하고, 각 패턴은 특정한 문제를 해결하기 위해 설계되었습니다. 적절한 디자인 패턴

    tech.dj-tiger.com

    2023.07.13 - [JAVA] - JAVA 디자인패턴 - 옵저버(Observer) 패턴

     

    JAVA 디자인패턴 - 옵저버(Observer) 패턴

    [ 목차 ] 안녕하세요. 이번에는 Java 디자인패턴 중 옵저버(Observer) 패턴에 대해서 알아보겠습니다. 1. 옵저버(Observer) 패턴이란? 옵저버 패턴은 디자인 패턴 중 하나로, 한 객체의 상태가 변화하면

    tech.dj-tiger.com

    2023.07.13 - [JAVA] - JAVA 디자인패턴 - 데코레이터(Decorator) 패턴

     

    JAVA 디자인패턴 - 데코레이터(Decorator) 패턴

    [ 목차 ] 안녕하세요. 오늘은 JAVA 디자인패턴 중 데코레이터(Decorator) 패턴에 대해서 알아보겠습니다. 1. 데코레이터(Decorator) 패턴 이란? 데코레이터 패턴은 기존 객체에 동적으로 새로운 기능을

    tech.dj-tiger.com

    2023.07.14 - [JAVA] - JAVA 디자인패턴 - 프록시(Proxy) 패턴

     

    JAVA 디자인패턴 - 프록시(Proxy) 패턴

    [ 목차 ] 안녕하세요. 이번에 알아볼 JAVA 디자인패턴은 프록시(Proxy) 패턴입니다. 1. 프록시(Proxy) 패턴 이란? 프록시 패턴은 객체의 대리자 또는 객체에 대한 참조를 제공하여 실제 객체의 내부 로

    tech.dj-tiger.com

    2023.07.14 - [JAVA] - JAVA 디자인 패턴 - 커맨드(Command) 패턴

     

    JAVA 디자인 패턴 - 커맨드(Command) 패턴

    안녕하세요. 오늘 알아볼 JAVA 디자인 패턴은 커맨드(Command) 패턴입니다. 1. 커맨드(Command) 패턴 이란? 커맨드 패턴은 요청을 객체로 캡슐화하여 메서드 호출에 의한 연동을 개선하고, 호출 정보를

    tech.dj-tiger.com

    2023.07.15 - [JAVA] - JAVA 디자인패턴 - 스트래티지(Strategy) 패턴

     

    JAVA 디자인패턴 - 스트래티지(Strategy) 패턴

    [ 목차 ] 안녕하세요. 오늘은 JAVA 디자인패턴 중 스트래티지(Strategy) 패턴에 대해서 작성해 보겠습니다. 스트래티지(Strategy) 패턴 이란? 스트래티지 패턴은 알고리즘 군을 정의한 다음 각각을 캡슐

    tech.dj-tiger.com

    2023.07.16 - [JAVA] - JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴

     

    JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴

    [ 목차 ] 안녕하세요. JAVA 디자인패턴 중 템플릿 메서드(Template Method) 패턴에 대해서 알아볼까요? 템플릿 메서드(Template Method) 패턴 이란? 템플릿 메서드 패턴은 알고리즘의 골격을 제공하고, 일부

    tech.dj-tiger.com

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 컴포지트(Composite) 패턴

     

    JAVA 디자인패턴 - 컴포지트(Composite) 패턴

    [ 목차 ] 안녕하세요. 이번에 알아볼 JAVA 디자인패턴은 컴포지트(Composite) 패턴입니다. 컴포지트(Composite) 패턴 이란? 컴포지트 패턴은 객체들의 조직을 트리 구조로 구성하여 전체-부분 계층을 표

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 이터레이터(Iterator) 패턴의 정의, 사용 이유, 구현방법

     

    JAVA 디자인패턴 - 이터레이터(Iterator) 패턴의 정의, 사용 이유, 구현방법

    [ 목차 ] 안녕하세요, 프로그래밍 세계의 친구분들! 오늘은 자주 사용되는 자바 디자인 패턴 중 하나인 이터레이터(Iterator) 패턴에 대해 알아볼까요? 디자인 패턴이란 소프트웨어를 설계할 때 반

    tech.dj-tiger.com

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 상태(State) 패턴의 정의, 구성요소, 구현, 장단점

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 비지터(Visitor) 패턴의 정의, 장점, 구현

     

    JAVA 디자인패턴 - 비지터(Visitor) 패턴의 정의, 장점, 구현

    [ 목차 ] 안녕하세요, 자바 프로그래밍을 사랑하는 여러분! 오늘은 디자인 패턴 중 하나인 비지터(Visitor) 패턴에 대해 자세히 알아볼까요? 디자인 패턴은 우리의 코드를 더 유연하고 효율적으로

    tech.dj-tiger.com

    2023.07.17 - [JAVA] - JAVA 디자인패턴 - 퍼사드(Facade) 패턴의 정의, 장점, 구현

    댓글

    💲 추천 글