[RxJava] RxJava 결합 연산자

minnie·2022년 2월 22일
0

RxJava

목록 보기
6/8
post-thumbnail

📝RxJava의 학습 순서
1. Observable 클래스를 명확하게 이해(특히 Hot Observable과 Cold Observable의 개념을 꼭 이해해야함)
2. 변환, 제어, 결합 연산자 등 카테고리별 주요 함수 공부
3. 스케줄러의 의미, subscribeOn()과 observeOn()함수의 차이
4. 그 밖의 디버깅, 흐름 제어함수


1. 결합 연산자

결합 연산자는 다수의 Observable을 하나로 합치는 방법을 제공한다. flatMap(), groupBy() 함수 등은 1개의 Observable을 확장해주는 반면 결합 연산자들은 여러 개의 Observable을 내가 원하는 Observable로 결합해준다.

1-1 zip()

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

1-2 combineLatest()

combineLatest()는 두 개의 Observable에서 각각 데이터가 생성될 때 데이터를 조합해서 전달하는 연산자이다.첫 데이터는 두 개의 Observable에서 모두 데이터가 생성됐을 때 전달이 되고, 그 이후에는 각각의 Observable에서 데이터가 생산될 때 데이터를 조합해서 전달한다.

1-3 merge()

merge()는 zip과 combineLatest와 다소 차이가 있다. 결합을 위해서는 단일 Observable이 아닌 두 개 이상의 Observable을 넣어야 한다. 하지만 merge는 순서나 데이터 발행 여부와 관계 없이 UpStream에서 먼저 입력되는 데이터를 그대로 발행한다.

1-4 concat()

concat 연산자는 이름 그대로 객체를 이어 붙여주는 연산자이다. 2개 이상의 Observable 객체를 이어 붙여 하나의 ObservableSource로 만들어주는 연산자이다.

참고 : https://blog.neonkid.xyz/263

profile
Android Developer

0개의 댓글