[typescript] 처리할 책임을 다음 객체로 넘기는 책임 연쇄 패턴과 타입스크립트의 결합 사례

책임 연쇄 패턴은 객체 간의 상호작용을 가로막지 않고 처리할 수 있게 하는 디자인 패턴 중 하나입니다. 타입스크립트를 사용하여 책임 연쇄 패턴을 구현하는 것은 강력하면서도 유연한 코드를 작성할 수 있는 효과적인 방법입니다.

이 게시물에서는 책임 연쇄 패턴을 소개하고, 타입스크립트를 사용하여 간단한 예시를 통해 이 패턴을 구현하는 방법을 살펴보겠습니다.

책임 연쇄 패턴이란?

책임 연쇄 패턴은 객체로 요청을 보내고, 이 요청을 처리할 수 있는 객체를 찾을 때까지 객체를 연결하여 요청을 처리하는 패턴입니다. 각 객체는 요청을 처리할 수 있는지 확인하고 처리할 수 있으면 처리하거나, 그렇지 않으면 다음 객체로 요청을 전달합니다.

타입스크립트와 함께 책임 연쇄 패턴 사용하기

타입스크립트를 사용하여 책임 연쇄 패턴을 활용하면 각 객체가 어떤 종류의 요청을 처리할 수 있는지에 대한 정보와 함께 객체 간의 연결을 명확하게 정의할 수 있습니다. 또한, 타입스크립트의 강력한 타입 시스템을 활용하여 객체 간의 연결이 올바르게 이루어지고 요청이 올바른 형태로 전파되도록 보장할 수 있습니다.

// 요청을 처리할 수 있는 인터페이스
interface Handler {
  setNext(handler: Handler): Handler;
  handle(request: string): string | null;
}

// 실제 요청을 처리하는 클래스
class ConcreteHandlerA implements Handler {
  private nextHandler: Handler | null = null;

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

  handle(request: string): string | null {
    if (request === 'A') {
      return '처리됨';
    } else if (this.nextHandler) {
      return this.nextHandler.handle(request);
    }
    return null;
  }
}

// 다음으로 넘길 요청을 처리하는 클래스
class ConcreteHandlerB implements Handler {
  private nextHandler: Handler | null = null;

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

  handle(request: string): string | null {
    if (request === 'B') {
      return '처리됨';
    } else if (this.nextHandler) {
      return this.nextHandler.handle(request);
    }
    return null;
  }
}

// 예시
const concreteHandlerA = new ConcreteHandlerA();
const concreteHandlerB = new ConcreteHandlerB();

concreteHandlerA.setNext(concreteHandlerB);

console.log(concreteHandlerA.handle('A')); // 출력: '처리됨'
console.log(concreteHandlerA.handle('B')); // 출력: '처리됨'
console.log(concreteHandlerA.handle('C')); // 출력: null

위의 예시에서는 ConcreteHandlerAConcreteHandlerB 클래스가 각각 특정한 유형의 요청을 처리할 수 있으며, 요청을 처리할 수 없으면 다음 핸들러로 요청을 전파합니다. 객체 간의 연결이 명확하게 정의되어 있고, 올바른 타입으로 요청이 전파됨을 타입스크립트가 보장합니다.

결론

책임 연쇄 패턴은 요청을 처리하는 객체 간의 관계를 유연하고 확장 가능하게 만들어줍니다. 타입스크립트의 강력한 타입 시스템을 활용하여 책임 연쇄 패턴을 구현하면 런타임 오류를 사전에 방지하고 안정적인 코드를 작성할 수 있습니다.

책임 연쇄 패턴과 타입스크립트의 결합은 큰 규모의 객체 간 상호작용을 처리하는 능력을 향상시키며, 유지보수가 용이하고 확장성이 있는 코드를 작성하는 데 도움이 됩니다.

참고 자료