[Android A..Z] Flow collect vs collectLatest
2024. 3. 30. 03:12ㆍ개발/[Kotlin] 안드로이드 개발
반응형
https://kotlinworld.com/252 너무 잘 정리되어 있는 글을 바탕으로 이해하기 쉽게 요약한다.
Collect
데이터를 수집하는데, suspend fun 수행이 끝나면 다음 suspend fun을 수행한다
즉 아래 코드를 보면 collect 시점에서 해당 스코프가 끝이나면 다시 수집하는 형식
값 하나를 print 하는데 1초가 걸리고 총 10초가 걸려서 값이 찍힌다.
val flow = flow<Int> {
for (i in 0..10) {
emit(i)
delay(100L)
}
}
init {
viewModelScope.launch {
flow.collect {
println("!!!방출된 값 $it")
delay(1000L)
}
}
}
CollectLatest
collectLatest는 항상 최신 데이터를 소비한다. 데이터가 들어온다면 많은 시간이 걸리는 연산도 무시하고 데이터를 발행한다.
아래 코드를 실행시키면 1초에 모든 값들이 방출된다.
즉 delay(1000L)을 취소하고 최신 데이터가 들어온다면 새로운 데이터로 발행된다.
val flow = flow<Int> {
for (i in 0..10) {
emit(i)
delay(100L)
}
}
init {
viewModelScope.launch {
flow.collectLatest {
println("!!!방출된 값 $it")
delay(1000L)
}
}
}
반응형
'개발 > [Kotlin] 안드로이드 개발' 카테고리의 다른 글
[Android A..Z] Flow 중간연산자 정리 (0) | 2024.04.21 |
---|---|
[Android A..Z] Flow onXXX연산자 예외처리 정리 (0) | 2024.04.21 |
[Android A..Z] Flow StateFlow vs SharedFlow 비교 (0) | 2024.03.30 |
[A..Z] Kotlin Flow vs StateFlow hot? cold? 스트림 쉽게 알아보기 (2) | 2023.11.29 |
[Android A..Z] DI Dependency Injection 한 방에 끝내기 (0) | 2022.10.20 |