본문 바로가기

설계

[디자인 패턴] 중재자 패턴 (Mediator Pattern) - python 예제 코드

중재자 패턴 (Mediator Pattern)은 객체들 간의 상호작용을 중재하는 객체를 도입하여 객체들 간의 결합도를 줄이고 유지보수성을 높이는 디자인 패턴입니다.

이 패턴에서 중재자(Mediator)는 객체들 간의 통신을 총괄하는 중앙 허브 역할을 하며, 객체들은 중재자를 통해 상호작용합니다. 이를 통해 객체들은 서로에 대해 알 필요 없이 중재자를 통해 상호작용할 수 있어서 결합도를 낮출 수 있습니다.

 

1. 예제 코드


아래는 중재자 패턴을 이해하기 위한 Python 코드 예제입니다.

 

class Mediator:
    def __init__(self):
        self.colleague_1 = Colleague1(self)
        self.colleague_2 = Colleague2(self)

    def send_message(self, message, colleague):
        if colleague == self.colleague_1:
            self.colleague_2.notify(message)
        else:
            self.colleague_1.notify(message)


class Colleague1:
    def __init__(self, mediator):
        self.mediator = mediator

    def send_message(self, message):
        self.mediator.send_message(message, self)

    def notify(self, message):
        print("Colleague1 gets message:", message)


class Colleague2:
    def __init__(self, mediator):
        self.mediator = mediator

    def send_message(self, message):
        self.mediator.send_message(message, self)

    def notify(self, message):
        print("Colleague2 gets message:", message)


mediator = Mediator()
mediator.colleague_1.send_message("Hello from Colleague1")
mediator.colleague_2.send_message("Hello from Colleague2")


위 코드에서 Mediator 클래스는 중재자 역할을 하며, Colleague1과 Colleague2 클래스는 중재자에 등록되어 객체들 간의 상호작용을 중재합니다.

각 Colleague 클래스는 send_message 메소드를 통해 메시지를 중재자에 전달하고, 중재자는 전달된 메시지를 수신한 객체에게 notify 메소드를 호출하여 메시지를 전달합니다. 이를 통해 객체들은 서로에 대해 알 필요 없이 중재자를 통해 상호작용할 수 있습니다.

 

2. 장점

  • 객체들 간의 결합도를 낮춤: 중재자 패턴은 객체들 간의 직접적인 상호작용을 제거하고 중재자를 통해 간접적인 상호작용을 수행합니다. 이를 통해 객체들 간의 결합도를 낮출 수 있습니다.
  • 유지보수성이 좋음: 객체들 간의 상호작용이 중재자를 통해 이루어지므로, 객체들 간의 관계가 변경되더라도 중재자의 인터페이스만 수정하면 됩니다. 이로 인해 유지보수성이 좋아집니다.
  • 확장성이 좋음: 새로운 객체를 추가하더라도 중재자에 등록하면 되므로, 객체의 추가가 용이합니다.

 

3. 단점

  • 중재자 객체의 복잡도: 중재자 객체가 객체들 간의 모든 상호작용을 처리하므로, 중재자 객체가 복잡해질 수 있습니다.
  • 중재자 객체의 중심화: 중재자 패턴을 사용하면 중재자 객체가 모든 상호작용을 총괄하므로, 중재자 객체가 애플리케이션의 중심이 되기도 합니다. 따라서 중재자 객체가 실패하면 전체 애플리케이션에 영향을 미칠 수 있습니다.

 

4. 결론

중재자 패턴은 객체들 간의 결합도를 낮추고 유지보수성을 높일 수 있으며, 확장성도 좋습니다. 하지만 중재자 객체의 복잡도와 중재자 객체의 중심화 등의 단점도 존재합니다. 이러한 장단점을 고려하여 적절하게 패턴을 적용해야 합니다.