[typescript] 메디에이터 패턴과 타입스크립트의 결합 사례

메디에이터 패턴은 객체 간의 느슨한 결합을 유지하면서 상호작용하는 방법을 제공하는 디자인 패턴입니다. 이 패턴을 사용하여 객체 간의 직접적인 상호작용을 제거하고, 대신 중간 객체를 통해 상호작용하도록 만들 수 있습니다. 이러한 패턴은 코드의 유연성과 유지보수성을 향상시키는 데 도움이 됩니다.

메디에이터 패턴의 구조

메디에이터 패턴은 중재자 객체를 통해 객체 간의 통신을 관장합니다. 중재자는 다른 객체들과의 상호작용을 중재하고 조정하는 역할을 합니다. 객체들은 중재자에 메시지를 보내고, 중재자는 해당 메시지를 수신하여 다른 객체들과 상호작용할 수 있습니다.

메디에이터 패턴은 다음과 같은 구성 요소로 구성됩니다.

  1. 중재자 (Mediator): 다른 객체들과의 상호작용을 중재하고 조정하는 역할을 합니다.
  2. 동료 객체 (Colleague): 중재자와 상호작용하는 객체들을 말합니다. 이들은 중재자를 통해 다른 객체들과 통신합니다.

메디에이터 패턴은 다양한 상황에서 사용될 수 있으며, 특히 복잡한 상호작용이 발생하는 시스템에서 유용하게 적용될 수 있습니다.

타입스크립트에서의 메디에이터 패턴 구현

타입스크립트는 이러한 디자인 패턴을 쉽게 구현할 수 있도록 지원합니다. 클래스, 인터페이스, 제네릭 등의 기능을 활용하여 메디에이터 패턴을 타입스크립트로 구현할 수 있습니다. 아래는 간단한 예시 코드입니다.

// 중재자
interface Mediator {
  send(message: string, colleague: Colleague): void;
}

// 동료 객체
interface Colleague {
  receive(message: string): void;
}

// 구체적인 중재자 구현
class ConcreteMediator implements Mediator {
  private colleague1: Colleague;
  private colleague2: Colleague;

  setColleague1(colleague: Colleague) {
    this.colleague1 = colleague;
  }

  setColleague2(colleague: Colleague) {
    this.colleague2 = colleague;
  }

  send(message: string, colleague: Colleague) {
    if (colleague === this.colleague1) {
      this.colleague2.receive(message);
    } else {
      this.colleague1.receive(message);
    }
  }
}

// 구체적인 동료 객체 구현
class ConcreteColleague1 implements Colleague {
  constructor(private mediator: Mediator) {}

  send(message: string) {
    this.mediator.send(message, this);
  }

  receive(message: string) {
    console.log(`Colleague1 received: ${message}`);
  }
}

class ConcreteColleague2 implements Colleague {
  constructor(private mediator: Mediator) {}

  send(message: string) {
    this.mediator.send(message, this);
  }

  receive(message: string) {
    console.log(`Colleague2 received: ${message}`);
  }
}

// 사용 예시
const mediator = new ConcreteMediator();
const colleague1 = new ConcreteColleague1(mediator);
const colleague2 = new ConcreteColleague2(mediator);

mediator.setColleague1(colleague1);
mediator.setColleague2(colleague2);

colleague1.send('Hello from colleague1');
colleague2.send('Hello from colleague2');

위의 예시 코드에서는 간단한 메디에이터 패턴의 구현을 볼 수 있습니다. MediatorColleague 인터페이스를 정의하고, 이를 구체적으로 구현한 ConcreteMediatorConcreteColleague 클래스를 만들어서 메디에이터 패턴을 구현했습니다.

타입스크립트의 강력한 타입 시스템을 활용하여 메디에이터 패턴을 유연하게 구현할 수 있으며, 이를 통해 객체 간의 느슨한 결합을 유지할 수 있습니다.

결론

타입스크립트는 객체 간의 상호작용을 중재하는 메디에이터 패턴을 쉽게 구현할 수 있도록 하는 강력한 기능을 제공합니다. 이를 통해 코드의 유연성과 유지보수성을 높일 수 있으며, 복잡한 시스템에서 객체 간의 느슨한 결합을 유지하는 데 도움이 됩니다.

메디에이터 패턴은 다른 디자인 패턴과 함께 사용되어 객체 간의 상호작용을 더욱 효율적으로 관리할 수 있도록 도와줍니다.

참고 자료