개발/코틀린

(Coroutine) Flow flatMapConcat, flatMapLatest, flatMapMerge

DinoDev 2023. 6. 14. 18:14
728x90
반응형

flatMapConcat, flatMapLatest, 그리고 flatMapMerge는 모두 Kotlin의 코루틴 라이브러리에서 제공하는 Flow 연산자들입니다. 이들 연산자들은 각각 다른 방식으로 upstream Flow의 각 요소를 다른 Flow로 변환하고, 이렇게 생성된 여러 Flow들을 하나의 결과 Flow로 연결합니다.

 

  • flatMapConcat: flatMapConcat 연산자는 upstream Flow의 각 요소를 Flow로 변환하고, 이를 순차적으로 연결하여 결과 Flow를 생성합니다. 즉, 한 번에 하나의 내부 Flow만 처리하며, 새로운 내부 Flow는 이전의 내부 Flow가 완전히 수집된 후에만 수집됩니다.
  • flatMapMerge: flatMapMerge 연산자도 upstream Flow의 각 요소를 Flow로 변환합니다. 하지만 flatMapMerge는 병렬로 여러 내부 Flow를 동시에 수집할 수 있습니다. 즉, 모든 내부 Flow는 동시에 수집되며, 방출되는 항목들은 결과 Flow에 병합됩니다.
  • flatMapLatest: flatMapLatest 연산자는 새로운 값이 upstream Flow에 의해 방출될 때마다 이전에 수집되고 있던 내부 Flow를 취소하고, 새로운 내부 Flow의 수집을 시작합니다. 즉, flatMapLatest는 항상 최신의 내부 Flow만 수집합니다.
flatMapConcat 같은 경우는 변환하는 Flow가 종료되지 않는다면 새로운 value가 넘어오더라도 기다리기 때문에 동작하지 않는 것처럼 보일 수 있습니다. 
반환하는 Flow가 종료되지 않더라도 새로운 value가 넘어올 때 새로운 Flow가 만들어져 동작하게 하려면 flatMapLatest를 사용해야 합니다.

 

요약하면, flatMapConcat는 순차적으로, flatMapMerge는 병렬로, 그리고 flatMapLatest는 최신의 항목만을 처리합니다. 이들 각각의 연산자는 서로 다른 유스 케이스에 적합하며, 요구 사항에 따라 적절한 연산자를 선택하면 됩니다.

728x90
반응형

'개발 > 코틀린' 카테고리의 다른 글

(Coroutine) asStateFlow()를 써야할까요?  (0) 2023.07.28
(Test) Junit에서 isEqualTo 와 isSameAs  (0) 2023.06.17
(코틀린) Testing with Kotest  (0) 2022.12.18
(코틀린) 동시성  (0) 2022.12.11
(코틀린) 자바 상호 운용성  (0) 2022.12.03