Kotlin
[Kotlin] 익명객체와 옵저버 패턴
98kg
2024. 3. 12. 23:34
이벤트를 수신 할 클래스를 kotlin 에선 listener 라고 부르고 이벤트를 전달하는 함수를 callback 함수 이라고 한다.
중간에 interface 를 만들어 서로 연결 짓는 다리 역활을 하며
그 후 컬백함수가 있는 클래스를 만들어 그 이벤트를 응답한다.
아직 완벽히 이해하진 못했지만 우선 이렇게 나는 이해했다..
더 공부해봐야겠다.
일반 클래스를 통한 옵저버 패턴
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(){
// this 는 eventPrinter 객체 자신을 나타내지만 받는 쪽에서 EventListener 만 요구했기 때문에
//EventListener구현부만 넘겨주게된다
//이를 객체지향의 다형성이라고한다
val counter = Counter(this)
counter.count()
}
}
익명객체를 이용한 옵저버 패턴
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}-")
}
})
counter.count()
}
}
object 와 형태는 비슷하나 단지 차이는 이름이 없다는 것이다.
이렇게 만들면 인터페이스를 구현한 객체를 코드 중간에도 즉시 생성하여 사용할 수 있다
옵저버 패턴은 이벤트를 기반으로 동작하는 모든 코드에서 광범위하게 사용되는 구조라서 꼭 이해할 때까지 공부하자,,,!