🌊 Flow
📖 Flow란?
Flow는 비동기적으로 여러 값을 순차적으로 반환하는 데이터 스트림입니다. 마치 suspend 함수의 리스트 버전이라고 생각하면 됩니다!
💡 기본 개념
단일 값 vs 여러 값
// suspend - 한 개의 값
suspend fun fetchData(): String {
delay(1000)
return "데이터"
}
// Flow - 여러 개의 값
fun fetchDataStream(): Flow<String> = flow {
emit("데이터1")
delay(500)
emit("데이터2")
delay(500)
emit("데이터3")
}
fun main() = runBlocking {
// 단일 값
println(fetchData())
// 여러 값
fetchDataStream().collect { value ->
println(value)
}
}
Flow 생성
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
// 1. flow 빌더
val flow1 = flow {
emit(1)
emit(2)
emit(3)
}
// 2. flowOf
val flow2 = flowOf(1, 2, 3)
// 3. asFlow
val flow3 = listOf(1, 2, 3).asFlow()
flow1.collect { println(it) }
}