PHpullh
학습 라이브러리/Kotlin/메디에이터 패턴 (Mediator)

KOTLIN · 디자인패턴

메디에이터 패턴 (Mediator)

객체 간 직접 통신 대신 중재자를 통해 간접 통신합니다. 복잡한 상호작용을 중앙에서 관리합니다.

디자인패턴고급mediatorindirect-communicationdecouplingcoordination

핵심 설명

객체 간 직접 통신 대신 중재자를 통해 간접 통신합니다. 복잡한 상호작용을 중앙에서 관리합니다.

Kotlin code

interface Mediator {
    fun notify(sender: Component, event: String)
}

abstract class Component(val name: String) {
    var mediator: Mediator? = null
}

class AuthComponent : Component("Auth") {
    fun login(user: String) {
        println("[$name] $user 로그인")
        mediator?.notify(this, "LOGIN:$user")
    }
    fun showWelcome(user: String) = println("[$name] 환영합니다, $user!")
}

class LogComponent : Component("Log") {
    fun log(msg: String) = println("[$name] 기록: $msg")
}

class NotifyComponent : Component("Notify") {
    fun send(msg: String) = println("[$name] 알림: $msg")
}

class AppMediator : Mediator {
    lateinit var auth: AuthComponent
    lateinit var log: LogComponent
    lateinit var notify: NotifyComponent

    override fun notify(sender: Component, event: String) {
        when {
            event.startsWith("LOGIN:") -> {
                val user = event.substringAfter("LOGIN:")
                log.log("$user 로그인")
                notify.send("$user 님이 접속했습니다")
                auth.showWelcome(user)
            }
        }
    }
}

fun main() {
    val mediator = AppMediator()
    val auth = AuthComponent().also { it.mediator = mediator }
    val log = LogComponent().also { it.mediator = mediator }
    val notify = NotifyComponent().also { it.mediator = mediator }
    mediator.auth = auth; mediator.log = log; mediator.notify = notify

    auth.login("김철수")
}

학습 팁

메디에이터 패턴은 GUI 컴포넌트, 마이크로서비스 간 통신, 채팅 방 등 N:N 관계를 1:N으로 단순화할 때 유용합니다.

주의할 점

중재자에 너무 많은 로직이 집중되면 "신(God) 객체"가 됩니다. 복잡해지면 여러 중재자로 분리하세요.

자주 묻는 질문

메디에이터 패턴 (Mediator)란 무엇인가요?

객체 간 직접 통신 대신 중재자를 통해 간접 통신합니다. 복잡한 상호작용을 중앙에서 관리합니다.

메디에이터 패턴 (Mediator) 학습 시 주의할 점은 무엇인가요?

중재자에 너무 많은 로직이 집중되면 "신(God) 객체"가 됩니다. 복잡해지면 여러 중재자로 분리하세요.