iOS/RxSwift&Combine

[iOS/RxSwift] CombineLatest vs Observable.zip

김졀니 2023. 11. 19. 20:12

 

💡 CombineLatest

Untitled.png

2개 이상의 Observable을 결합하여 하나의 Observable로 만들 때 사용한다.

Untitled.pngUntitled.png

CombineLatest는 결합하려는 이벤트가 최소 한 번씩은 next이벤트가 emit되어야 구독을 시작하게 된다.

위의 예시는 BehaviorSubject 이벤트를 결합 한 것이다. BehaviorSubject는 초기 값을 설정하게 되어 선언 후 바로 combineLatest를 수행하게 된다.

 

만약! 초기값이 없는 PublishSubject를 사용한다면?

Untitled.pngUntitled.png

a와 b 모두 한 번 emit이 되어야 combineLatest를 수행할 수 있다.

a의 이벤트가 먼저 emit이 된 후 b가 emit이 되기 때문에 b가 emit되는 시점에 combineLatest를 수행할 수 있게 된다.

combineLatest를 수행하는 시점의 a 값은 마지막으로 emit 된 5가 전달된다.

Untitled.png

b이벤트가 emit되지 않으면 combineLatest는 수행되지 않는다.

💡 Zip

Untitled.png

zip은 combineLatest와 비슷하게 2개 이상의 Observable을 결합하여 하나의 Observable을 만든다는 점에서 비슷하다.

zip은 emit 시점보다 몇 번째로 emit되는 것인지가 중요하다.

 

위와 같은 예시를 사용해보자면

Untitled.pngUntitled.png

a에서 첫번째로 emit된 2와 b에서 첫번째로 emit이 된 “나”가 짝을 지어 emit된다.

 

정리

✔️ combineLatest vs zip

2개 이상의 Observable을 결합하여 하나의 Observable을 만든다는 점에서는 비슷하다.

combineLatest

  • 결합 하려는 이벤트가 모두 최소 한 번 emit 되어야 subscribe를 시작한다.
  • emit되는 대로 조합해서 emit

zip

  • emit되는 순서가 같은 observable을 짝 지어서 방출한다.
  • emit시점 보다 몇 번째로 emit 된 것인지가 중요함