iyOmSd/Title: RxSwift

[RxSwift] Combine Operator정리 - CombineLatest, Merge, Zip

냄수 2020. 5. 30. 17:02
반응형

Rx를 이용해서 개발하면서

Combine할때 유용한 Operator를 소개할게요

제 주관적으로 자주쓰이는것을 골라봤어요

 

 

Combine Operator는

말그대로 서로다른 스트림을 하나의 스트림으로 합쳐서 사용할 때

유용하게 쓰일거에요

 

CombineLatest

최초 두개의 스트림에서 각각 하나씩 이벤트를 받아온 뒤부터

두개의 스트림중 한쪽에서만 이벤트가 발생해도

새로운 스트림에 이벤트를 받아올 수 있음

그림이 이해가시나요?

처음보면 어려울수도있어요

 

숫자스트림과 알파벳스트림

이렇게 2개의 스트림이 존재하구요

숫자스트림은 1, 2, 3, 5 이벤트를

알파벳스트림은 A, B, C, D이벤트를 발생하죠?

 

처음에는 두스트림에 모든 이벤트가 있어야

새로운 스트림에 이벤트가 들어와요

1과 A가 차례대로들어오면 그때

새로운 스트림에 1A이벤트가 적용되서 내려오는거에요

 

다음에는 숫자스트림에 2가들어오네요

 

숫자스트림: 1

알파벳스트림: A

새로운스트림: 1A

상태에서

 

숫자스트림: 2

알파벳스트림: A

새로운스트림: 2A

상태가 됬어요

 

느낌이오시나요?

 

다음에는 알파벳스트림에 B가 들어오면

현재 숫자스트림은 2니까

새로운 스트림에는 2B가 나오겠네요

 

이런 느낌으로 두개이상의 스트림의 상태를 관찰하면서

하나의 스트림에서라도 이벤트가 생기면 모든 스트림의 이벤트(2, B)에 접근할 수 있고

그 스트림들의 이벤트를 이용해서 원하는 작업을 하면돼요

 

 

 

Merge

Merge는 단어에서 볼 수 있듯이 두개의 스트림을 합쳐주는 연산자에요

스트림을 합쳐서 하나의 스트림으로 만들어 줘요

이벤트 두개가 모두 들어올 때까지 기다리지않고 바로바로 하나씩 보내줘요

각 스트림에 이벤트가 올때마다 바로바로 내려보내주는 역할이에요

이 연산자는 각스트림의 이벤트에 접근할 수 없고

그냥 바로 반환되고 새로운 스트림을 만들어줘요

따라서 스트림을 구분할 수 없고 스트림으로 차례대로 들어온 이벤트를 처리할 수 있어요

 

 

 

Zip

CombineLastest와 비슷하지만 다른 개념이에요

CombineLastest은 각스트림에서 이벤트가 발생하면 바로 새로운 이벤트가 내려왔지만

Zip은 모든스트림에 같은횟수의 이벤트가 들어올 때 실행돼요

 

만약 두개의 스트림이있다면

두 스트림에 이벤트가 같은횟수가 들어오면

새로운 스트림으로 나오는거에요

스트림이 비어있는상태에서

숫자스트림에 1이들어왔네요

그러면

Zip은 모든스트림의 이벤트횟수가같아야 생성이되니까

아래와 같겠죠?

 

숫자스트림: 1

알파벳스트림: 

새로운스트림: 

 

이 상태가 되요

 

그리고 다음으로 알파벳스트림에 A가들어오면

숫자스트림에 1번

알파벳스트림에 1번

같은 횟수가 들어왔으니 새로운스트림에 이벤트가 전달되겠네요

 

숫자스트림: 1

알파벳스트림: A

새로운스트림: 1A

 

다음으로 알파벳스트림에 B가들어오면

숫자스트림은 1번째이벤트고

알파벳스트림은 2번째이벤트니까

새로운스트림에는 이벤트가 오지않겠네요

 

숫자스트림: 1

알파벳스트림: B

새로운스트림: 1A

 

그다음에 숫자스트림에 2가들어오면

숫자스트림과 알파벳스트림의 이벤트횟수가 같아서

새로운스트림에 2B가 생성되는거에요

 

 

 

반응형