[typescript] 서로 다른 객체들의 상호작용을 중개하는 메디에이터 패턴과 타입스크립트의 결합 사례

안녕하세요! 이번에는 타입스크립트와 디자인 패턴 중 하나인 메디에이터 패턴에 대해 알아보겠습니다. 메디에이터 패턴은 객체 간의 상호작용을 중개하는 디자인 패턴으로, 객체들이 직접적으로 서로 통신하지 않고 중개자를 통해 상호작용하는 방식을 제공합니다. 이 패턴은 객체 간의 결합도를 낮추고 유연하고 확장 가능한 코드를 작성하는 데 도움이 됩니다.

메디에이터 패턴의 기본 원리

메디에이터 패턴은 객체 간의 직접적인 통신을 피하고 중개자를 통해 간접적으로 통신하는 방식으로 동작합니다. 이를 통해 객체들은 서로에 대해 알 필요가 없으며 중개자만 알고 있으면 되기에 결합도를 낮출 수 있습니다. 객체들은 중개자를 통해 통신하며, 중개자는 수신한 정보를 기반으로 적절한 동작을 호출하거나 다른 객체에게 전파합니다.

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

타입스크립트는 정적 타입 검사를 제공하며 객체 지향 프로그래밍을 지원하는 강력한 언어입니다. 이러한 특징을 바탕으로 메디에이터 패턴을 타입스크립트로 구현하면 유연하고 안전한 코드를 작성할 수 있습니다.

아래는 타입스크립트를 사용하여 간단한 채팅 애플리케이션에서 메디에이터 패턴을 구현한 예제입니다.

// 중개자 (Mediator) 클래스
class ChatMediator {
  users: User[] = [];

  addUser(user: User) {
    this.users.push(user);
  }

  sendMessage(message: string, user: User) {
    this.users.forEach((u) => {
      if (u !== user) {
        u.receiveMessage(message);
      }
    });
  }
}

// 사용자 (User) 클래스
class User {
  constructor(private name: string, private mediator: ChatMediator) {}

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

  receiveMessage(message: string) {
    console.log(`${this.name} received message: ${message}`);
  }
}

// 사용 예
const mediator = new ChatMediator();
const user1 = new User('User 1', mediator);
const user2 = new User('User 2', mediator);

mediator.addUser(user1);
mediator.addUser(user2);

user1.sendMessage('Hello, user2!'); // User 2 received message: Hello, user2!

위 예제에서 ChatMediator 클래스는 중개자 역할을 하며, User 클래스는 중개자를 통해 메시지를 주고받는 역할을 합니다.

마치며

메디에이터 패턴은 객체 간의 느슨한 결합과 유연성을 제공하여 소프트웨어를 설계하는 데 도움이 됩니다. 타입스크립트의 정적 타입 검사와 객체 지향 프로그래밍을 활용하여 메디에이터 패턴을 구현하면 안전하고 유지보수하기 쉬운 코드를 작성할 수 있습니다.

더 많은 디자인 패턴과 타입스크립트의 활용 방법에 대해 알아보고 싶다면 TypeScript 공식 문서 및 디자인 패턴 서적을 참고하시기 바랍니다.

참고 자료:

이상으로 타입스크립트와 메디에이터 패턴에 대한 간단한 소개를 마치도록 하겠습니다. 부족한 점이 있을 수 있지만, 도움이 되기를 바라며 이상으로 마치도록 하겠습니다. 감사합니다!