[typescript] 책임을 처리할 수 있는 객체를 체인 형태로 연결하여 처리하는 체인 오브 레스폰시빌리티 패턴과 타입스크립트의 결합 사례

체인 오브 레스폰시빌리티(Chain of Responsibility)는 객체를 연결하여 요청을 처리하는 패턴으로, 요청을 처리할 수 있는 객체를 연결하고, 요청이 이를 따라 순차적으로 전달되어 처리됩니다. 이 패턴은 요청을 보낸 쪽과 이를 처리할 책임이 있는 객체를 분리하여 유연성을 확보합니다.

타입스크립트에서의 체인 오브 레스폰시빌리티 패턴 적용

타입스크립트에서는 체인 오브 레스폰시빌리티 패턴을 활용하여 책임을 처리할 수 있는 객체를 체인 형태로 연결하여 처리할 수 있습니다.

interface Handler {
  setNextHandler(handler: Handler): Handler;
  handleRequest(request: string): void;
}

class BaseHandler implements Handler {
  private nextHandler: Handler;

  setNextHandler(handler: Handler): Handler {
    this.nextHandler = handler;
    return handler;
  }

  handleRequest(request: string): void {
    if (this.nextHandler) {
      this.nextHandler.handleRequest(request);
    }
  }
}

class ConcreteHandler1 extends BaseHandler {
  handleRequest(request: string): void {
    // 처리 가능한 요청이라면 처리하고, 그렇지 않다면 다음 핸들러로 전달
    if (/* condition */) {
      // 처리 로직
    } else {
      super.handleRequest(request);
    }
  }
}

class ConcreteHandler2 extends BaseHandler {
  handleRequest(request: string): void {
    // 처리 가능한 요청이라면 처리하고, 그렇지 않다면 다음 핸들러로 전달
    if (/* condition */) {
      // 처리 로직
    } else {
      super.handleRequest(request);
    }
  }
}

// 클라이언트 코드
const handler1 = new ConcreteHandler1();
const handler2 = new ConcreteHandler2();
handler1.setNextHandler(handler2);

handler1.handleRequest('request');

위 예시는 타입스크립트로 구현된 체인 오브 레스폰시빌리티 패턴의 간단한 구현입니다. BaseHandler는 다음 핸들러를 참조하고, 실제 요청을 처리하는 ConcreteHandler1, ConcreteHandler2는 요청 처리 여부에 따라 처리 혹은 다음 핸들러에게 전달합니다.

이러한 방식으로 타입스크립트에서 체인 오브 레스폰시빌리티 패턴을 활용하여 책임을 처리할 수 있는 객체를 체인 형태로 연결하여 유연하게 처리할 수 있습니다.

결론

타입스크립트에서는 객체 지향 디자인 패턴을 활용하여 복잡한 로직을 구현할 때 유용하게 활용할 수 있습니다. 체인 오브 레스폰시빌리티 패턴은 책임을 처리할 수 있는 객체를 연결하여 요청을 처리하는 강력한 방법으로, 타입스크립트에서도 이를 적용하여 유연하고 확장 가능한 코드를 작성할 수 있습니다.

더 많은 정보는 타입스크립트 공식 문서에서 확인하실 수 있습니다.