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 와 형태는 비슷하나 단지 차이는 이름이 없다는 것이다.

이렇게 만들면 인터페이스를 구현한 객체를 코드 중간에도 즉시 생성하여 사용할 수 있다

 

 

 

옵저버 패턴은 이벤트를 기반으로 동작하는 모든 코드에서 광범위하게 사용되는 구조라서 꼭 이해할 때까지 공부하자,,,!