개발콩블로그
[RxSwift] zip vs combineLatest 본문
안녕하세요!
개발콩입니다. 오늘은 RxSwift operator 중 zip와 combineLatest에 대해서 소개하도록 하겠습니다.
Zip
zip은 여러 Observable의 방출을 지정된 함수로 결합하고, 각 결합에 대한 결과를 바탕으로 하나의 항목을 방출합니다.
값들이 동시에 방출되지 않아도 순차적으로 결합을 시도합니다.
예시 코드
let observable1 = PublishSubject<String>()
let observable2 = PublishSubject<Int>()
Observable.zip(observable1, observable2)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
obs1.onNext("A") // 실행 X (observable2 값이 없음)
obs2.onNext(1) // 실행 O ("A", 1)
obs2.onNext(2) // 실행 X (observable1 값이 없음)
obs1.onNext("B") // 실행 O ("B", 2)
CombineLatest
combineLatest는 여러 Observable 중 하나가 항목을 방출할 때마다, 각 Observable에서 방출된 최신 항목을 지정된 함수로 결합하여 방출합니다.
여러 Observable이 값을 방출해야만 결합을 시작하며, 그 이후에는 언제든 한쪽에서 값이 방출될 때마다 최신 값을 결합하여 방출합니다.
let observable1 = PublishSubject<String>()
let observable2 = PublishSubject<Int>()
Observable.combineLatest(observable1, observable2)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
obs1.onNext("A") // 실행 X (observable2 값이 없음)
obs2.onNext(1) // 실행 O ("A", 1)
obs2.onNext(2) // 실행 O ("A", 2)
obs1.onNext("B") // 실행 O ("B", 2)
obs1.onNext("C") // 실행 O ("C", 2)
두 가지의 operator는 비슷한 역할을 수행하면서 차이가 존재합니다.
이러한 차이점을 알고 적절하게 사용하면 좋을 것 같습니다.
참고
https://reactivex.io/documentation/operators/zip.html
https://reactivex.io/documentation/operators/combinelatest.html
'RxSwift' 카테고리의 다른 글
[RxSwift] PublishRelay, BehaviorRelay, ReplayRelay (0) | 2025.02.27 |
---|---|
[RxSwift] PublishSubject, BehaviorSubject, ReplaySubject, AsyncSubject (0) | 2025.02.26 |
[RxSwift] ObservableType과 ObserverType (0) | 2025.02.25 |
[RxSwift] RxSwift의 시작 Observable & Observer (0) | 2025.02.24 |
[RxSwift] throttle vs debounce (0) | 2025.02.20 |