Coroutine Flow는 Flow를 결합할 수 있는 연산자 zip과 combine을 제공하고 있다.
두 연산자 동작에 어떤 차이가 있는지 알아보자
zip
- 결합된 모든 flow의 결과값이 올 때까지 기다렸다 방출한다.
- flow 결과값들이 1:1로 결합하는 방식
- 모든 flow의 방출이 완료될 때까지 작동한다.
그림으로 보면 이해가 쉽다
flow1
- Blue Circle이 방출되고 1초 후 Red Circle이 방출된다.
flow2
- Blue Square가 방출되고 2초 후 Red Square가 방출된다.
flow1.zip(flow2) 의 결과값은?
1. Blue Circle과 Blue Square가 결합된다.
2. 1초 후 방출된 Red Circle은 대응되는 값이 없기 때문에 기다린다.
3.다시 1초 후 방출되는 Red Square와 결합된다.
zip은 모든 flow의 값들이 방출되어야 종료가 되기 때문에, 값이 방출되지 않으면 무한정으로 기다릴 수도 있을 것 같다
timeout 같은걸 설정하면 이런 동작을 방지할 수 있지 않을까..? 관련해서는 다음에 알아봐야겠다.
combine
- 가장 최신의 값들을 결합하여 방출한다.
- zip과 마찬가지로 모든 방출이 완료되면 종료된다.
역시 말보단 그림이 더 이해하기 쉽다
flow1,2의 동작은 위와 같다
flow1.combine(flow2) 의 결과값은?
1. Blue Circle과 Blue Square가 결합된다
2. 1초 후 방출된 Red Circle은 Blue Square와 결합된다.
3. 1초 후 방출된 RedSquare는 flow1의 가장 최신값인 Red Circle과 결합된다.
결론
zip은 결합한 모든 flow 의 값들이 방출되기를 기다렸다 결합한다.
combine은 결합한 flow의 최신 값들이 결합한다.
'Kotlin' 카테고리의 다른 글
== 과 ===의 차이 (0) | 2023.04.18 |
---|---|
Inner class 와 Nested Class 차이 (0) | 2023.04.18 |
operator fun invoke (0) | 2023.04.10 |
정렬 (0) | 2023.01.09 |
코루틴 1 (0) | 2022.05.12 |