중재자 패턴 (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. 결론
중재자 패턴은 객체들 간의 결합도를 낮추고 유지보수성을 높일 수 있으며, 확장성도 좋습니다. 하지만 중재자 객체의 복잡도와 중재자 객체의 중심화 등의 단점도 존재합니다. 이러한 장단점을 고려하여 적절하게 패턴을 적용해야 합니다.
'설계' 카테고리의 다른 글
[디자인 패턴] 옵저버 패턴 (Observer Pattern) - python 예제 코드 (0) | 2023.03.10 |
---|---|
[디자인 패턴] 메멘토 패턴 (Memento Pattern) - python 예제 코드 (0) | 2023.03.10 |
[디자인 패턴] 반복자 패턴 (Iterator Pattern) - python 예제 코드 (0) | 2023.03.09 |
[디자인 패턴] 커맨드 패턴 (Command Pattern) - python 예제 코드 (0) | 2023.03.09 |
[디자인 패턴] 책임 연쇄 패턴 (Chain of Responsibility Pattern) - python 예제 코드 (0) | 2023.03.09 |