[Kotlin] Observer 패턴(옵저버 패턴) 설명 & 예제
- Language/Kotlin
- 2021. 2. 4.
728x90
Observer(옵저버) 패턴
- 이벤트가 발생하는 것을 '감시' 하는 감시자의 역할을 만든다고 해서 옵저버라고 부름
- 안드로이드의 예라면
- 키의 입력
- 터치의 발생
- 데이터 수신
- 함수로 직접 요청하지 않았지만 시스템 또는 루틴에 의해서 발생하게 되는 동작들을 이벤트라고 한다.
-
이러한 이벤트가 발생할 때마다 '즉각적으로 처리' 할 수 있도록 만드는 프로그래밍 패턴을 '옵저버 패턴' 이라고 함
Observer(옵저버) 패턴을 구현하기 위해서는 두개의 클래스가 필요함
- 이벤트를 수신
- 이벤트의 발생 및 전달
두 클래스간의 통신하는 방법 : 인터페이스 'observer' 이용
코틀린에서는 listener 라고 함
-> 이렇게 이벤트를 넘겨주는 행위를 CallBack 이라고함
//class EventPrinter : 이벤트를 수신해서 출력
//class Counter : 숫자를 카운트 하며 5의 배수마다 이벤트를 발생 시킬 Counter
//위 두개를 연결 할 interface : EventListener
fun main() {
//1. Counter가 5의 배수마다 이벤트를 발생시킴
//2. EventPrinter 내에서 구현된 EventListener에서 출
EventPrinter().start()
}
//이벤트가 발생할 때 숫자를 반환
interface EventListener {
fun onEvent(count: Int)
}
//이벤트가 발생하는 Counter
class Counter(var listener: EventListener) { //생성자에서 EventListener 를속성으로 받는다
fun count() {
for (i in 1..100) {
if (i % 5 == 0) {
listener.onEvent(i)
}
}
}
}
//이벤트를 받아서 화면에 출력할 Event Printer
class EventPrinter: EventListener {
override fun onEvent(count: Int) {
print("${count}-")
}
fun start(){
//EventListener 구현부 넘겨준다
//this는 EventPrinter 의미 하지만 받는 쪽에서 EventListener 만요구 -> 구현부만 넘겨준다
//이를 객체 지향의 다형성이라고 한다
val counter = Counter(this)
counter.count()
}
}
익명함수 사용 버전 : EventPrinter
class EventPrinter {
fun start(){
val counter = Counter(object: EventListener {
override fun onEvent(count: Int) {
print("${count}-")
}
})
counter.count()
}
}
옵저버 패턴은 이벤트 기반으로 동작하는 모든 코드에서 광범위하게 쓰이는 방식임
728x90
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 제너릭(Generic) 설명 & 예제 (0) | 2021.02.09 |
---|---|
[Kotlin] 클래스의 다형성(+as, is) 설명 & 예제 (0) | 2021.02.08 |
[Kotlin] 싱글턴 패턴 & Object 설명 & 예제 (0) | 2021.02.04 |
[Kotlin] 람다 함수 보충 설명, 스코프 함수 설명 & 예제 (0) | 2021.02.03 |
[Kotlin] 고차함수, 람다함수 설명 & 예제 (0) | 2021.02.03 |