[swift] Mediator 디자인 패턴
Mediator 디자인 패턴은 객체간의 상호작용을 중재하는 디자인 패턴입니다. 이 패턴은 객체가 서로 직접 통신하는 것을 방지하고 중재자(Mediator)를 통해 통신하도록 하는 구조를 제공합니다.
Mediator 패턴의 구조
Mediator 패턴은 다음과 같은 구조로 이루어집니다:
- Mediator (중재자): 객체들 간의 중재 및 조정을 담당하는 인터페이스를 정의합니다.
- ConcreteMediator (구체적인 중재자): Mediator 인터페이스를 구현하고, 객체들 간의 중재와 조정을 수행합니다.
- Colleague (동료): Mediator를 통해 통신을 하는 객체를 나타냅니다.
- ConcreteColleague (구체적인 동료): Colleague 인터페이스를 구현하고, Mediator를 통해 다른 객체들과 통신합니다.
Mediator 패턴의 예시
protocol Mediator {
func sendMessage(message: String, colleague: Colleague)
}
protocol Colleague {
var mediator: Mediator? { get set }
func sendMessage(message: String)
func receiveMessage(message: String)
}
class ConcreteMediator: Mediator {
private var colleague1: Colleague
private var colleague2: Colleague
init(colleague1: Colleague, colleague2: Colleague) {
self.colleague1 = colleague1
self.colleague2 = colleague2
}
func sendMessage(message: String, colleague: Colleague) {
if colleague === colleague1 {
colleague2.receiveMessage(message: message)
} else {
colleague1.receiveMessage(message: message)
}
}
}
class ConcreteColleague1: Colleague {
var mediator: Mediator?
func sendMessage(message: String) {
mediator?.sendMessage(message: message, colleague: self)
}
func receiveMessage(message: String) {
print("ConcreteColleague1 received message: \(message)")
}
}
class ConcreteColleague2: Colleague {
var mediator: Mediator?
func sendMessage(message: String) {
mediator?.sendMessage(message: message, colleague: self)
}
func receiveMessage(message: String) {
print("ConcreteColleague2 received message: \(message)")
}
}
let mediator = ConcreteMediator(colleague1: ConcreteColleague1(), colleague2: ConcreteColleague2())
mediator.colleague1.mediator = mediator
mediator.colleague2.mediator = mediator
mediator.colleague1.sendMessage(message: "Hello from colleague1")
mediator.colleague2.sendMessage(message: "Hello from colleague2")
위의 예시는 Mediator 패턴을 사용하여 두 개의 ConcreteColleague가 Mediator를 통해 통신하는 예시를 보여줍니다.
여기서는 ConcreteMediator가 Colleague들 간의 통신을 조정하고 있으며, 각 ConcreteColleague는 Mediator를 통해 메시지를 보내고 받습니다.
Mediator 패턴의 장점
Mediator 패턴을 사용하면 다음과 같은 장점을 얻을 수 있습니다:
- 객체들 간의 직접적인 상호작용을 방지하여 결합도를 줄입니다.
- 객체들 간의 통신 로직을 중앙화하여 유지보수를 용이하게 합니다.
Mediator 패턴은 복잡한 상호작용을 조정해야 하는 경우나 객체 간의 결합도를 낮춰야 하는 경우에 유용하게 사용될 수 있습니다.
결론
Mediator 패턴은 객체들 간의 상호작용을 중재하는 구조를 제공하여 유지보수성을 향상시키고 결합도를 줄이는데 도움이 됩니다. 이로 인해 소프트웨어의 유연성이 향상되고 복잡성이 줄어들 수 있습니다. 따라서 Mediator 패턴은 객체 지향 소프트웨어 개발에서 유용하게 활용될 수 있습니다.