Observable
ㆍpublic abstract class Observable<T> extends Object implements ObservableSource<T>
ㆍ데이터의 스트림을 생성하는 클래스입니다.
ㆍ기본적으로 구독자가 구독을 하기 전에는 데이터를 발행하지 않습니다.
ㆍ구독자에게 알림을 보내서 데이터를 처리하게 합니다.
ㆍ알림은 3가지 종류(onNext, onError, onComplete)가 있습니다.
- onNext: 데이터 발행을 알립니다.
- onError: 에러가 발생했음을 알립니다. 이후 onNext, onComplete는 호출되지 않습니다.
- onComplete: 모든 데이터가 발행되었음을 알립니다.
ㆍ구독자는 데이터의 발행이 완료되거나 구독을 취소할 때까지 알림를 받습니다.
ㆍ모든 알림은 동시에 발생하지 않습니다. 즉, 직렬화되어 있습니다.
ㆍ동기/비동기 방식을 지원합니다.
ㆍ배압을 지원하지 않습니다.
ㆍOutOfMemoryError가 발생하지 않도록, 최대 1000개 이하의 데이터 스트림에서 사용합니다.
ㆍ마우스 또는 터치 이벤트와 같이 배압이 거의 발생하지 않는 GUI 이벤트에 사용합니다.
ㆍ일반적으로 Flowable보다 오버헤드가 낮습니다.
ㆍ마블 다이어그램 보는 방법
create
ㆍ마블 다이어그램
ㆍpublic static <T> Observable<T> create(ObservableOnSubscribe<T> source)
- (Cold) Observable을 직접 생성합니다.
- 구독자에게 데이터를 발행하려면 onNext를 호출해야 합니다.
- 모든 데이터를 발행했다면 onComplete를 호출해야 합니다.
fromArray
ㆍ마블 다이어그램
ㆍpublic static <T> Observable<T> fromArray(T... items)
- 배열을 Observable로 변환하고 배열의 각 요소들을 순차적으로 발행합니다.
just
ㆍ마블 다이어그램
ㆍpublic static <T> Observable<T> just(T item, T item, ..., T item)
- 1~10개의 아이템을 Observable로 변환하고 각 아이템을 순차적으로 발행합니다.
map
ㆍ마블 다이어그램
ㆍpublic final <R> Observable<R> map(Function<? super T,? extends R> mapper)
- 발행되는 데이터에 mapper 함수를 적용하고, 그 결과 데이터를 다시 발행합니다.
- T: 입력 데이터 타입, R: 출력 데이터 타입
observeOn
ㆍ마블 다이어그램
ㆍpublic final Observable<T> observeOn(Scheduler scheduler)
- 구독자가 지정된 scheduler에서 알림을 받도록 Observable을 변환합니다.
- observeOn이 호출된 이후에 적용됩니다.
subscribe
ㆍpublic final Disposable subscribe()
- Observable을 구독합니다.
- onNext, onComplete 이벤트는 무시합니다.
- onError 이벤트가 발생하면 OnErrorNotImplementedException을 던집니다.
- 주로 코드를 테스트, 디버깅할 때 사용합니다.
- Disposable을 반환합니다.
ㆍpublic final Disposable subscribe(Consumer<? super T> onNext)
- onNext 이벤트를 처리합니다.
- onError 이벤트가 발생하면 OnErrorNotImplementedException을 던집니다.
ㆍpublic final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError)
- onNext, onError 이벤트를 처리합니다.
ㆍpublic final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError,
Action onComplete)
- onNext, onError, onComplete 이벤트를 처리합니다.
ㆍpublic final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError,
Action onComplete, Consumer<? super Disposable> onSubscribe)
- onNext, onError, onComplete, onSubscribe 이벤트를 처리합니다.
- onSubscribe는 한 번만 실행되고, 구독을 시작했음을 알립니다.
ㆍpublic final void subscribe(Observer<? super T> observer)
- Consumer와 비슷한 역할을 하는 Observer로 Observable을 구독합니다.
- onNext, onError, onComplete, onSubscribe를 구현하여 데이터를 처리할 수 있습니다.
subscribeOn
ㆍ마블 다이어그램
ㆍpublic final Observable<T> subscribeOn(Scheduler scheduler)
- 지정된 scheduler에서 데이터를 발행 및 처리하도록 Observable을 변환합니다.
- subscribeOn이 호출되기 이전, 이후에 모두 적용됩니다.
zip
ㆍ마블 다이어그램
ㆍpublic static <T1,T2,R> Observable<R> zip(ObservableSource<? extends T1> source1,
ObservableSource<? extends T2> source2,
BiFunction<? super T1,? super T2,? extends R> zipper)
- 2~9개의 Observable이 각각 발행하는 데이터를 순차적으로 결합하여 새로운 Observable을 반환합니다.
- 새로운 Observable은 가장 적은 데이터를 발행하는 source의 onNext 호출 수만큼 onNext를 호출합니다.
- source1과 source2에서 첫 번째로 발행되는 데이터를 결합한 결과가 새로운 Observable의 첫 번째 데이터가 됩니다.
- 만약 source1이 source2보다 짧다면, source2는 발행을 완료하지 못합니다.(doOnComplete()를 호출하지 못합니다.)
- 만약 source1과 source2의 길이가 같아서 발행이 같이 완료되어도,
source2는 즉시 dispose 되기 때문에 doOnComplete()를 호출하지 못합니다.
출처
http://reactivex.io/RxJava/javadoc/
'Android > RxJava2' 카테고리의 다른 글
[안드로이드 RxJava2] 시작하기 (0) | 2019.05.18 |
---|