Groo

flatMapLatest를 활용하여 flatMapConcat의 한계 극복 본문

프로그래밍 언어/Kotlin

flatMapLatest를 활용하여 flatMapConcat의 한계 극복

김주엽 2022. 4. 17. 16:39

아래 내용은 모두 해당 원글을 기반으로 요약정리한 내용입니다.

그림은 저자가 직접 제작한 것임을 알려드립니다. (출처: Kt World)


flatMapLatest는 원 Flow의 최신 데이터만을 이용하여 새로운 Flow로 변환할 수 있도록 도와준다.

새로운 Flow로 변환하는 과정에서 원 Flow로부터 최신 데이터가 발행될 경우, 기존 Flow 변환을 취소하고 최신 데이터를 사용하여 새로운 Flow 변환을 시작한다.

flatMapLatest는 flatMapConcat의 한계를 극복하며 collectLatest와 동작 방식이 유사하다.

 

val stockFlow = flow {
    emit(66600) // 삼성전자
    emit(95400) // 카카오
    emit(308500) // 네이버
}

@FlowPreview
fun increaseStock() {
    lifecycleScope.launch {
        stockFlow.flatMapLatest { value ->
            flow {
                emit(value * 2)
                delay(10000) // 삼성전자, 카카오는 취소됨
                emit(value * 3)
            }
        }.collect {
            println("증폭된 주식 가격: $it")
        }
    }
}

// 증폭된 주식 가격: 133200
// 증폭된 주식 가격: 190800
// 증폭된 주식 가격: 617000
// 증폭된 주식 가격: 925500

flatMapLatest에 대해서 알아봤다.

collectLatest와 동작 방식이 유사해 어렵지 않았다.

오늘 저녁은 또 뭐 먹지 🌝

Comments