ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [RxJava] 1. Observer Pattern에 대한 이해
    Programming/RxJava 2020. 8. 16. 19:46
    Observer Pattern (관찰자 패턴)

    옵서버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다.

     

    Instance <--- observe/subscribe <--- observer/subscriber

    Instance ---> notify ---> observer/subscriber

     

    Observable

    • Observable(옵저버블)은 이벤트를 만들어내는(emit) 주체
    • 이벤트 스트림을 통해 만든 이벤트를 내보낸다. (0 개부터 여러 개의 이벤트를 내보내는 것이 가능)

    Observer

    • Observer(옵저버)는 Observable에서 만들어진 이벤트에 반응(react)하며, 이벤트를 받았을 때 수행할 작업을 정의한다. 
    • 옵저버가 옵저버블에서 만들어진 이벤트에 반응하기 위해서는 옵저버가 옵저버블을 관찰(구독)하고 있어야 한다.
    • 즉, Observer가 Observable을 Subscribe(구독)한다.
    • 옵저버는 옵저버블을 구독한 이후부터 옵저버에서 이벤트를 받을 수 있다.

    https://ssionii.tistory.com/7

    위 그림을 보면 옵저버블 내부에는 이벤트 스트림이 흐르고 있고, 이벤트가 발생했을 때, 옵저버블은 옵저버에게 이벤트를 전달한다. 옵저버는 옵저버블을 구독하고 있다가 이벤트가 발생했을 때 이벤트를 전달받는다.

     

    Disposable

    • 디스포저블(Disposable)은 옵저버가 옵저버블을 구독할 때 생성되는 객체이다.
      • 이는 옵저버블에서 만드는 이벤트 스트림과 이에 필요한 리소스를 관리한다.
    • Observable로 부터 더 이상 이벤트를 받지 않으려면 디스포저블을 통해 구독해제를 할 수 있다.
      • Observable은 이를 감지하여 자신을 구독하고 있는 옵저버가 더이상 없는 경우, 이벤트를 만들기 위해 유지하고 있던 리소스를 해제 한다.
    • CompositeDisposable을 이용하면 여러개의 디스포저블 객체를 하나의 객체에서 관리할 수 있다.
      • 주로, 생명주기에 따라 리소스를 적절하게 관리해야하는 액티비티나 프래그먼트에서 이를 자주 사용한다. 

    Operators

    • Operators(연산자)는 이벤트 스트림을 통해 전달되는 이벤트를 변환한다.
    • 예를 들면, 옵저버블에서 전달하는 이벤트들 filter()를 통해 특정 이벤트들만 필터링해서 받을 수 있다.

     

    Scheduler

    • Scheduler(스케줄러)는 작업을 수행할 쓰레드를 지정한다.
    • 안드로이드에서는 UI를 업데이트 할 수 있는 스레드인 메인 스레드를 사용할 수 있다.
    • 스케줄러는 observeOn()메서드를 사용하여 지정한다.
    • 이후 오는 연산자나 옵저버에서 수행되는 작업이 observeOn()에서 지정한 스레드에서 실행된다.
Designed by Tistory.