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) 객체"가 됩니다. 복잡해지면 여러 중재자로 분리하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.