[java] 체인 오브 리스폰시빌리티 패턴

소프트웨어 디자인 패턴은 특정한 문제를 해결하기 위한 효율적인 솔루션을 제공합니다. 체인 오브 리스폰시빌리티 패턴은 요청을 보낸 객체와 요청을 처리할 수 있는 다른 객체 사이의 연결을 따라가는 패턴으로, 체인 상의 여러 객체가 한 요청을 처리할 수 있습니다.

패턴 개요

체인 오브 리스폰시빌리티 패턴은 객체 간의 순환적 관계를 사용하여 요청을 보낸 객체가 요청을 처리하는데 필요한 객체를 직접 알 필요 없이 처리할 수 있도록 합니다. 각 객체는 자신이 처리할 수 없는 요청을 다음 처리 객체에게 전달하고, 이는 마지막에 처리할 수 있는 객체가 나올 때까지 반복됩니다.

패턴 예제

다음은 자바 언어를 사용하여 체인 오브 리스폰시빌리티 패턴을 구현한 간단한 예제입니다.

// Handler Interface
public interface Handler {
    void setNext(Handler handler);
    void handleRequest(int request);
}

// Concrete Handlers
public class ConcreteHandler1 implements Handler {
    private Handler nextHandler;

    public void setNext(Handler handler) {
        this.nextHandler = handler;
    }

    public void handleRequest(int request) {
        if (request < 10) {
            System.out.println("Request handled by ConcreteHandler1");
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
}

public class ConcreteHandler2 implements Handler {
    private Handler nextHandler;

    public void setNext(Handler handler) {
        this.nextHandler = handler;
    }

    public void handleRequest(int request) {
        if (request < 20) {
            System.out.println("Request handled by ConcreteHandler2");
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
}

// Client
public class Client {
    public static void main(String[] args) {
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();

        handler1.setNext(handler2);

        handler1.handleRequest(5);
        handler1.handleRequest(15);
    }
}

위의 예제에서는 Handler 인터페이스를 정의하고 ConcreteHandler1ConcreteHandler2 클래스에서 이를 구현합니다. 클라이언트는 두 개의 핸들러를 연결하고, 각 핸들러에 요청을 보내어 처리 과정을 확인합니다.

요약

체인 오브 리스폰시빌리티 패턴은 객체 간의 연결을 통해 요청을 처리하는 패턴으로, 처리할 수 있는 객체를 직접 알 필요 없이 요청을 보낼 수 있도록 합니다.

참고문헌: