본문 바로가기

gyub's 공부일기/RxJava

[RxJava] 결합 연산자 zip(), combineLastest(),merge(), concat()

결합 연산자

 

1. zip()

zip() 함수의 특징은 각각의 Observable을 모두 활용해 2개 혹은 그 이상의 Observable을 결합하는다는데 있습니다. 예를 들어 A,B 두 개의 Observable을 결합한다면 2개의 Observable에서 모두 데이터를 발행해야 결합할 수 있습니다. 그전까지는 발행을 기다려요.

 

그림으로 보시겠습니다!

이렇듯 두 개의 Observable이 발행될 때까지 기다렸다가 결합을 한 후 발행을 하는 애에요~~

 

2. combineLatest()

이 함수는 2개 이상의 Observable을 기반으로 Observable 각각의 값이 변경되었을 때 갱신해주는 함수입니다!

 

예를 들면 첫 번째 Observable과 두 번째 Observable을 결합하는 기능을 만든다고 하면 첫 번째 Observable의 값 혹은 두 번째 Observable의 값이 변경되었을 때 그 값을 자동으로 갱신해주죠

 

마블 다이어그램은 다음과 같습니다!

첫 번째 Observable에서만 데이터를 발행하거나 두 번째 Observable의 데이터 흐름만 있으면 구독자에게 어떤 데이터도 발행하지 않습니다!

Observable이 모두 값을 발행하면 그제서야 결과값을 발행하죠

 

3. merge()

merge() 함수는 zip() 함수나 combineLatest() 함수에 비해 가장 단순한 결합 함수에요

입력 Observable의 순서와 모든 Observable이 데이터를 발행하는지 등에 관여하지 않고 어느 것이든 업스트림에서 먼저 입력되는 데이터를 그대로 발행합니다!

그림을 보면 아시겠지만 말 그대로 merge시킵니다! 하나의 흐름으로 만들어주는거죠!

 

4. concat()

이 함수는 2개 이상의 Observable을 이어 붙여주는 함수입니다. 첫 번째 Observable에 onComplete 이벤트가 발생해야 두 번째 Observable을 구독합니다.

마치 순차적으로 실행되는 것 같죠.

첫 번째 Observable에 onComplete 이벤트가 발생하지 않게 하면 두 번째 Observable은 영원히 대기합니다.

이재는 잠재적 memory leak의 위험성이 있어요!! 따라서 입력 Observable이 반드시 완료(onComplete) 될 수 있게 해야 합니다ㅏㅏㅏ!!반드시!!!!

반응형