240521_디모의 코틀린 강의 #17강. 익명객체와 옵저버 패턴

2024. 5. 20. 23:59TIL(Today I Learned)

유튜브 - 디모의 코틀린 문법 강의 정리

 

#17강. 익명객체와 옵저버 패턴

 

1. 옵저버 패턴: event(키의 입력, 터치 발생, 데이터 수신 등 함수로 직접 요청하지 않았지만 시스템, 루틴에 의해 발생하는 동작)가 발생할 때마다 즉각 처리하게 만드는 프로그래밍 패턴

  - 옵저버 패턴에 필요한 2개의 클래스: event 수신 클래스, event 발생/전달 클래스

 

fun main(){
	EventPrinter().start()
}

interface EventListener{
	fun onEvent(count:Int)
}

class EvetPrinter : EventLister{
	override fun onEvent(count:Int){
    	println("${count} - ")
    }
    
    fun start(){
    	val counter = Counter(this)
        counter.count()

코드 구조

  • Class EventListener:  이벤트 수신/출력
  • Interface EventListener: 연결 인터페이스
  • Class Counter: 5의 배수마다 이벤트 발생시킴

2. 익명객체: EventListener를 상속받아 구현하지 않고 임시로 만든 별도의 EventListener객체(익명객체)를 대신 넘겨주는 것

 

for main(){
	EventPrinter().start()
    // 5-10-15-20-.... 출력
    // Counter가 5의 배수마다 이벤트를 발생시킨 것을 EventPrinter 내에서 구현된 EventLister에서 출력
}

interface EventLister{
	fun onEvent(count:Int)
}

class Counter(var listener:EventListener){
	fun count(){
    	for (i in 1..100){
        	if (i % 5 == 0) listetr.onEvent(i)
        }
    }
}

class EventPrinter{   // 상속 X
	fun start(){
    	val counter = Counter(object: EventListener { // object의 이름이 없음 / EventListener 상속
        	override fun onEvent(count:Int){
            	println("${count}-")
            }
        }) // 인터페이스를 구현한 객체를 코드 중간에도 중간에 생성해 사용 가능
    	counter.count()