코틀린 강좌 #16 익명객체와 옵저버 패턴

Kotlin/기본 문법 · 2020. 12. 19. 14:50

테크 과학! DiMo

 

테크과학! DiMo

개발자가 얘기하는 생활 속 IT기술에 대한 과학! 여러분이 몰랐던, 혹은 정확히 알지 못했던 IT 테크놀러지를 파드립니다! 좋은 영상을 위한 채널 후원, 투네이션을 통해서 해주세요! 후원링크 htt

www.youtube.com

 

 

개발 환경: 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-

 

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