테크 과학! DiMo
개발 환경: play.kotlinlang.org
👀옵서버 패턴
이벤트가 발생할 때마다 '즉각적으로 처리' 할 수 있도록 만드는 프로그래밍 패턴
이벤트를 수신하는 클래스와 이벤트의 발생 및 전달하는 클래스 2개의 클래스가 필요하며, 이 사이에 인터페이스를 끼워
넣는다.
이 때 해당 인터페이스를 observer. 코틀린에서는 'listener'라고 부르며 이벤트를 넘겨주는 행위를 'callback'이라고 한다.
fun main() {
EventPrinter().start()
}
interface EventListener {
fun onEvent(count: Int)
}
class Counter(var listener: EventListener) {
fun count() {
for (i in 1..100) {
if (i % 5 == 0) listener.onEvent(i)
}
}
}
class EventPrinter: EventListener {
override fun onEvent(count: Int) {
print("${count}-")
}
fun start() {
val counter = Counter(this)
counter.count()
}
}
Output:
5-10-15-20-25-30-35-40-45-50-55-60-65-70-75-80-85-90-95-100-
익명 객체(Anonymous Object)
EventPrinter가 EventListener를 상속받아 구현하지 않고 임시로 만든 별도의 EventListener 객체를 대신 넘겨줄 수도 있
다.
fun main() {
EventPrinter().start()
}
interface EventListener {
fun onEvent(count: Int)
}
class Counter(var listener: EventListener) {
fun count() {
for (i in 1..100) {
if (i % 5 == 0) listener.onEvent(i)
}
}
}
class EventPrinter {
fun start() {
val counter = Counter(object: EventListener {
override fun onEvent(count: Int) {
print("${count}-")
}
})
}
}
Output:
5-10-15-20-25-30-35-40-45-50-55-60-65-70-75-80-85-90-95-100-
이렇게 만들면 인터페이스를 구현한 객체를 코드 중간에도 '즉시 생성'하여 사용할 수 있다.
'Kotlin > 기본 문법' 카테고리의 다른 글
코틀린 강좌 #18 제너릭 (0) | 2020.12.19 |
---|---|
코틀린 강좌 #17 클래스의 다형성 (0) | 2020.12.19 |
코틀린 강좌 #15 오브젝트 (0) | 2020.12.19 |
코틀린 강좌 #14 스코프 함수 (0) | 2020.12.19 |
코틀린 강좌 #13 고차함수와 람다함수 (0) | 2020.12.19 |