📝RxJava의 학습 순서
1. Observable 클래스를 명확하게 이해(특히 Hot Observable과 Cold Observable의 개념을 꼭 이해해야함)
2. 변환, 제어, 결합 연산자 등 카테고리별 주요 함수 공부
3. 스케줄러의 의미, subscribeOn()과 observeOn()함수의 차이
4. 그 밖의 디버깅, 흐름 제어함수
결합 연산자는 다수의 Observable을 하나로 합치는 방법을 제공한다. flatMap(), groupBy() 함수 등은 1개의 Observable을 확장해주는 반면 결합 연산자들은 여러 개의 Observable을 내가 원하는 Observable로 결합해준다.
zip()은 두 개 이상의 Observable 객체를 이용하여 하나의 ObservableSource로 결합해주는 연산자이다. 두 데이터가 발행되기 전의 상태라면 데이터를 받을 때까지 기다려야 한다. zip연산자는 두 연산자 중 하나의 연산자라도 발행된 상태가 아니라면 데이터가 발행될 때까지 대기한다.
최대 9개의 Observable을 결합할 수 있다.
Observable<Integer> source = Observable.zip(
Observable.just(100, 200, 300),
Observable.just(10, 20, 30),
Observable.just(1, 2, 3),
(a, b, c) -> a + b + c );
source.subscribe(System.out::println);
111
222
333
➕ zipWith()
zip과 비슷한 연산자로 zipWith()가 있다. zipWith()는 기존에 반환된 단일 Observable 객체에서 또 다른 zip 연산을 취하고자 하는 경우에 사용가능하다.
Disposable source = Observable.just(100, 200, 300).zipWith(
Observable.just(10, 20, 30),
(a, b) -> a + b
).subscribe(System.out::println);
110
220
330
combineLatest()는 두 개의 Observable에서 각각 데이터가 생성될 때 데이터를 조합해서 전달하는 연산자이다.첫 데이터는 두 개의 Observable에서 모두 데이터가 생성됐을 때 전달이 되고, 그 이후에는 각각의 Observable에서 데이터가 생산될 때 데이터를 조합해서 전달한다.
merge()는 zip과 combineLatest와 다소 차이가 있다. 결합을 위해서는 단일 Observable이 아닌 두 개 이상의 Observable을 넣어야 한다. 하지만 merge는 순서나 데이터 발행 여부와 관계 없이 UpStream에서 먼저 입력되는 데이터를 그대로 발행한다.
concat 연산자는 이름 그대로 객체를 이어 붙여주는 연산자이다. 2개 이상의 Observable 객체를 이어 붙여 하나의 ObservableSource로 만들어주는 연산자이다.