KOTLIN · 객체지향
옵저버 패턴 (Observer Pattern)
이벤트 발생 시 등록된 관찰자들에게 알림을 전달하는 패턴입니다. Kotlin의 고차 함수와 위임을 활용하여 간결하게 구현합니다.
객체지향중급observerevent-emitterlistenerpublish-subscribe
핵심 설명
이벤트 발생 시 등록된 관찰자들에게 알림을 전달하는 패턴입니다. Kotlin의 고차 함수와 위임을 활용하여 간결하게 구현합니다.
Kotlin code
class EventEmitter<T> {
private val listeners = mutableListOf<(T) -> Unit>()
fun on(listener: (T) -> Unit) { listeners.add(listener) }
fun off(listener: (T) -> Unit) { listeners.remove(listener) }
fun emit(event: T) { listeners.forEach { it(event) } }
fun clear() { listeners.clear() }
}
data class UserEvent(val type: String, val userId: String)
class UserService {
val events = EventEmitter<UserEvent>()
fun createUser(id: String) {
println("사용자 생성: $id")
events.emit(UserEvent("CREATED", id))
}
fun deleteUser(id: String) {
println("사용자 삭제: $id")
events.emit(UserEvent("DELETED", id))
}
}
fun main() {
val service = UserService()
service.events.on { e -> println("로그: ${e.type} - ${e.userId}") }
service.events.on { e ->
if (e.type == "CREATED") println("환영 이메일 발송: ${e.userId}")
}
service.createUser("user-001")
service.deleteUser("user-001")
}학습 팁
리스너를 제거하려면 람다를 변수에 저장해야 합니다. 익명 람다는 참조가 달라 off로 제거할 수 없습니다.
주의할 점
이벤트 핸들러에서 예외가 발생하면 나머지 핸들러가 호출되지 않습니다. 각 핸들러를 try-catch로 감싸는 것을 고려하세요.
자주 묻는 질문
옵저버 패턴 (Observer Pattern)란 무엇인가요?
이벤트 발생 시 등록된 관찰자들에게 알림을 전달하는 패턴입니다. Kotlin의 고차 함수와 위임을 활용하여 간결하게 구현합니다.
옵저버 패턴 (Observer Pattern) 학습 시 주의할 점은 무엇인가요?
이벤트 핸들러에서 예외가 발생하면 나머지 핸들러가 호출되지 않습니다. 각 핸들러를 try-catch로 감싸는 것을 고려하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.