-
[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(구독)한다.
- 옵저버는 옵저버블을 구독한 이후부터 옵저버에서 이벤트를 받을 수 있다.
위 그림을 보면 옵저버블 내부에는 이벤트 스트림이 흐르고 있고, 이벤트가 발생했을 때, 옵저버블은 옵저버에게 이벤트를 전달한다. 옵저버는 옵저버블을 구독하고 있다가 이벤트가 발생했을 때 이벤트를 전달받는다.
Disposable
- 디스포저블(Disposable)은 옵저버가 옵저버블을 구독할 때 생성되는 객체이다.
- 이는 옵저버블에서 만드는 이벤트 스트림과 이에 필요한 리소스를 관리한다.
- Observable로 부터 더 이상 이벤트를 받지 않으려면 디스포저블을 통해 구독해제를 할 수 있다.
- Observable은 이를 감지하여 자신을 구독하고 있는 옵저버가 더이상 없는 경우, 이벤트를 만들기 위해 유지하고 있던 리소스를 해제 한다.
- CompositeDisposable을 이용하면 여러개의 디스포저블 객체를 하나의 객체에서 관리할 수 있다.
- 주로, 생명주기에 따라 리소스를 적절하게 관리해야하는 액티비티나 프래그먼트에서 이를 자주 사용한다.
Operators
- Operators(연산자)는 이벤트 스트림을 통해 전달되는 이벤트를 변환한다.
- 예를 들면, 옵저버블에서 전달하는 이벤트들 filter()를 통해 특정 이벤트들만 필터링해서 받을 수 있다.
Scheduler
- Scheduler(스케줄러)는 작업을 수행할 쓰레드를 지정한다.
- 안드로이드에서는 UI를 업데이트 할 수 있는 스레드인 메인 스레드를 사용할 수 있다.
- 스케줄러는 observeOn()메서드를 사용하여 지정한다.
- 이후 오는 연산자나 옵저버에서 수행되는 작업이 observeOn()에서 지정한 스레드에서 실행된다.
'Programming > RxJava' 카테고리의 다른 글
[RxJava] 4. Filtering & Combining Operator (0) 2020.09.06 [RxJava] 3. Creating & Transforming Operator (0) 2020.09.06 [RxJava] 2. Subject / 생산자 (0) 2020.09.02 [RxJava] 넷플릭스가 만든 라이브러리, RxJava (2) 2020.08.16