옵저버 패턴

매일 수정하는 GNOSS LV5·2021년 9월 30일
1

AndroidStudio

목록 보기
18/83
post-custom-banner

MVVM을 공부하던 도중 따로 정리해야겠다라는 생각이 들어서 작성하게 되었습니다.


옵저버 패턴

어떤 이벤트가 발생하는 것을 감시하는 패턴입니다.
예를들어 어떤 유튜버를 구독한다고 생각합시다.
A,B,C는 해당 유튜버를 구독하고 있고 D,E는 구독하지 않았습니다.
유튜버가 업로드를 하는순간 구독자들 (A,B,C)에게 자동으로 알림이가고
D,E 는 해당 사실을 알지 못합니다.

안드로이드의 경우
1. 사용자가 키보드를 눌렀을때
2. 버튼 터치를 했을때
3. API응답이 수신됐을때

먼저 인터페이스를 작성한다.

//이 이벤트를 상속받아, 이벤트가 발생할 때마다 호출할 메소드를 구현하면 됨.
//종의 역할
interface EventListenr {
    fun onEvent(count : Int)
}

이벤트리스너를 생성자로 받고 리스너의 조건을 적는다.
리스너가 특정 조건이 될때마다 종을 친다(=onEvent)

//5배수가 감지되면 지정된 이벤트를 발생시킵니다.
//종이 울리면 이벤트를 발생시킬건데, 종을 치는 조건을 적는 공간.
class Counter(var listenr: EventListenr) {
    //생성자로 이벤트리스너를 넘겨받습니다.
    fun count(){
        for (i in 1..100){
            if (i%5==0){
                //종친다.
                listenr.onEvent(i)
            }
        }
    }
}

리스너를 상속받아 onEvent를 구체화할예정이다.
start()가 발생할때 오버라이딩 되어있는 onEvent가 실행되고 그때마다 print할것이다.

//이벤트를 수신받았을 때 5배수를 출력.
//종은 쳤다. 무엇을 할래?
class EventPrinter : EventListenr {

    fun start(){
        //this를 통해 EventListener 구현부를 넘겨줌
        Counter(this).count()
    }

    //리스너를 상속받아 콜백 메소드를 구현(5배수를 프린트하는것)
    override fun onEvent(count: Int) {
        print("${count}-")
    }

}
EventPrinter().start()
profile
러닝커브를 따라서 등반중입니다.
post-custom-banner

0개의 댓글