[Rx] Rx 기본 용어 정리 - Observable, Observer, Subject, Trait
31 Jan 2020 |
Observable
event 를 내보낼 수 있는 능력 (emit)
- event 가 흘러가는 흐름을 추상화한 것
- Observer 패턴에서 사용하는 용어로는 Subject 라고 보면 된다.
- Sequence, Stream 를 같은 의미로 많이 쓴다
- Observable 이 내보내는 event를 받아 어떤 작업을 하기위해
subscribe()
메소드가 정의되어 있다. - Observable 은 subscribe 해야 그 때부터 event를 내보내기 시작한다.
- 내부에서 AnonymousObserver를 생성해서 observing 하기 때문
- subscribe 할 때마다 새로운 observer가 생김
- Observable이 emit 하는 Event 는 세가지 종류가 있다.
- next, error, completed
- error, completed 이벤트 발생시 Sequence는 종료된다.
Observer
event를 받을 수 있는 능력 (receive)
- Observer는 event를 외부에서 주입받을 수 있다.
on()
메소드의 argument로 event를 주입한다.onNext()
,onCompleted()
등 자주 쓰는 event 에 대한 sugar method도 있다.
Subject
Observable & Observer
- Observable 인 동시에 Observer이다.
- 따라서 event를 주입받고, 이를 내보낼 수 있는 능력을 가진다.
- 사용 예) 사용자의 button tap event ⇢ subject 가 그 이벤트 받으면 api 찔러서 특정 데이터를 받아와서 내보냄
- observer 능력 : button tap event를 받을 수 있음
- observable 능력 : 데이터를 내보낼 수 있음
Trait
Observable 보다 좀더 좁은 개념. 더 적은 행동만 가능
-
책에서는 다음과 같이 설명한다
Observables with a narrower set of behavior than regular observable
-
Observable 인데 좀 더 특정된, 좁은 개념의 역할만 가능하다
-
예를 들어 main thread 에서만 event를 내보낼 수 있도록 제한할 수 있다. 혹은 event 타입을 complete, error 만 받게도 할 수 있다.