ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Observer 패턴
    spring/reactive 2021. 6. 1. 16:34

    배경

    reactive카테고리에 갑자기 Observer패턴이 있으니 당황할수도 있지만 reactive프로그래밍의 핵심인 Reactive Streams는 Observer패턴의 발전된 형태이니 Observer패턴을 복습할 필요가 있다고 생각했다. 핵심적인 부분만 간단하게 짚고 넘어가자.

     

    Subject Observer Status

    - subject : 크리에이터

    - observer : 구독자

    - status : 영상

    Subject

    이벤트가 발생한 시점에 구독자에게 영상을 전달하는 크리에이터라고 생각하면 쉽다. add()는 구독자를 추가하고, remove()는 구독취소를 처리하고, notifyStatus()는 영상이 업로드됨을 알리는 기능을 수행한다. 내부적으로 구독자를 관리하는 방법은 DB가 될 수도, 인메모리 List일수도 있다. 인터페이스를 구현한 클래스에서 담당하면 된다.

     

    Observer

    구독자를 추상화하여 구독자가 영상을 받았을 때 하는 행위를 직접 구현할 수 있도록 설계했다.

     

    상태변경을 알리는 시점

    subject를 크리에이터에 비유해서 마치 subject가 직접 업로드 시점을 결정하는 게 자연스러워 보이지만, 이 경우 의존관계 설정을 통해 upload()를 하는 클래스와 notify()를 하는 클래스를 분리하는 게 맞을 것 같다. 

     

    실제 상황

    이 정도로 상황을 만들면 될 것 같다. 약간 무성의한 감이 있는데 추가적인 내용이 생각하면 수정하도록 한다.

    Iterator 패턴과의 관계

    구독자에게 이벤트가 발생한 시점에 상태를 전달해주는 Observer패턴과 달리 Iterator패턴은 등록한 데이터를 가져와 원하는 작업을 수행한다. 즉, Observer는 nofity(status)라면 Iterator는 iter.next()라고 생각할 수 있고 동일한 기능을 수행하되 다른 관점에서 해석하는 걸로 생각할 수 있다. 말이 좀 어려운데 나중에 여유가 생기면 예제를 통해 자세하게 정리하면 좋을 것 같다.

     

    observer   <-> iterator

    push        <-> pull

    consumer  <-> supplier

    댓글

Designed by Tistory.