[kotlin] 중재자 디자인 패턴과 코틀린

중재자(Mediator) 디자인 패턴은 객체 간의 상호 작용을 중앙 집중화하는 패턴으로, 객체들 간의 직접적인 통신을 제어하기 위해 중재자 객체를 도입하는 것을 목표로 합니다. 이번 글에서는 중재자 디자인 패턴을 코틀린으로 구현하는 방법에 대해 알아보겠습니다.

중재자 디자인 패턴의 구조

중재자 패턴은 중재자, 동료 객체, 중재자를 통해 통신하는 동료들로 구성됩니다. 중재자는 동료 객체들 간의 통신을 중앙화하기 때문에 동료 객체들은 서로 직접 통신하지 않고 중재자를 통해 통신합니다.

코틀린으로 중재자 패턴 구현하기

interface Mediator {
    fun mediate(colleague: Colleague, message: String)
}

class ConcreteMediator : Mediator {
    private val colleague1: Colleague = ConcreteColleague1(this)
    private val colleague2: Colleague = ConcreteColleague2(this)

    override fun mediate(colleague: Colleague, message: String) {
        when (colleague) {
            colleague1 -> colleague2.receive(message)
            colleague2 -> colleague1.receive(message)
        }
    }

    fun send(message: String, colleague: Colleague) {
        mediate(colleague, message)
    }
}

interface Colleague {
    fun send(message: String)
    fun receive(message: String)
}

class ConcreteColleague1(private val mediator: Mediator) : Colleague {
    override fun send(message: String) {
        mediator.send(message, this)
    }

    override fun receive(message: String) {
        println("ConcreteColleague1 received: $message")
    }
}

class ConcreteColleague2(private val mediator: Mediator) : Colleague {
    override fun send(message: String) {
        mediator.send(message, this)
    }

    override fun receive(message: String) {
        println("ConcreteColleague2 received: $message")
    }
}

fun main() {
    val mediator = ConcreteMediator()
    mediator.colleague1.send("Hello from Colleague1")
    mediator.colleague2.send("Hi from Colleague2")
}

위 코드는 코틀린으로 중재자 디자인 패턴을 구현한 예시입니다. Mediator 인터페이스를 구현한 ConcreteMediator 클래스와 Colleague 인터페이스를 구현한 ConcreteColleague1ConcreteColleague2 클래스가 중재자 패턴을 구성하고 있습니다.

마치며

중재자 디자인 패턴은 객체 간의 결합도를 낮추고 유지보수성과 확장성을 향상시키는데 도움을 줍니다. 코틀린은 이러한 디자인 패턴을 간결하게 구현할 수 있는 강력한 언어이며, 중재자 패턴 또한 코틀린으로 쉽게 구현할 수 있습니다.

참고문헌: