flowλ μ§μνλ©΄ νλ¦μ
λλ€.
androidμμλ κ°μ μμ°¨μ μΌλ‘ λ³΄λΌ μ μλ data Streamμ
λλ€.
flowλ λ°μ΄ν°λ₯Ό μμ±νκ³ μ²λ¦¬νλ μμ
μ *λΉλκΈ°μ μΌλ‘ μνν©λλ€.
* λΉλκΈ° : λΉλκΈ° μμ μ μ¬λ¬ μμ μ λμμ ν μ μμ΅λλ€. ν μμ μ΄ μλ£λκΈ°λ₯Ό κΈ°λ€λ¦¬μ§ μκ³ , λ€μ μμ μ μ¦μ μμν μ μμ΅λλ€.
κ·Έλ¦Όμ (κ°μ μμ°¨μ μΌλ‘ λ΄λ³΄λ΄λ κ³Όμ μΌλ‘) μμ°μλ λ°μ΄ν°λ₯Ό μμ°νκ³ flowλ₯Ό ν΅ν΄ μ€κ°μλ λ°μ΄ν°λ₯Ό κ°κ³΅ν μ μμ΅λλ€.
κ·Έλ¦¬κ³ μλΉμκ° κ΅¬λ
μ νλ©΄ λ°μ΄ν°λ₯Ό μλΉν μ μλ ꡬ쑰μ
λλ€.
μΌλ¨ flowμ λμλ°©μμ ꡬνν΄λ³΄κ³ flowμ λν΄μ λ μ΄μΌκΈ° ν΄λ³΄κ² μ΅λλ€.
flowλ flow λΉλ APIλ₯Ό μ¬μ©ν΄ λ§λ€κ³ , emit()μ μ΄μ©ν΄ κ°μ μλμΌλ‘ λ°μ΄ν° μ€νΈλ¦ΌμΌλ‘ 보λ
λλ€.
flow λΉλλ₯Ό ν΅ν΄ TestFlowλ₯Ό λ§λ€μμ΅λλ€.
val TestFlow: Flow<Int> = flow {
for (i in 1..10) {
delay(1000)
emit(i)
}
}
flowλ λ€μν μ°μ°μλ₯Ό μ§μνλ©° map, filter, reduce, transform λ±μ μ°μ°μλ‘ λ°μ΄ν°λ₯Ό λ³νν μ μμ΅λλ€
TestFlow
.map { it * 2 } // κ° κ°μ 2λ₯Ό κ³±ν¨
.filter { it % 2 == 0 } // μ§μλ§ ν΅κ³Ό
flowλ λΉλκΈ° λ°©μμ μ΄μ©νλ―λ‘ Coroutineμ μ¬μ©ν΄μΌ ν©λλ€.
μλΉμλ collectλ₯Ό ν΅ν΄ flowμμ κ°μ μμ§νκ³ λ°μ΄ν°λ₯Ό νΈμΆν©λλ€.
launch {
TestFlow.collect { value ->
println(value)
}
}
flowλ Cold Streamμ νΉμ±μ κ°μ§λλ€.
Cold Streamμ ꡬλ
μ΄ μμλ λ λ°μ΄ν°λ₯Ό μμ±νλ κ²μ λ§ν©λλ€.
Cold Streamμ κ°μ₯ μ΅μ μ λ°μ΄ν° λΆν° λ°©μΆνκΈ°μ μ΄μ μ λ°©μΆλμλ λ°μ΄ν°λ μ μ§νμ§ μμ΅λλ€.
μ§μμ λ¬Όμ λ§μκ³ μΆλ€κ³ νμ λ,
μμ°μλ λ¬Όν±ν¬ μλ λ¬Όμ μμ°ν©λλ€. (μ΄λ μλ λΉμ΄μλ λ¬Όν±ν¬λΌκ³ κ°μ νκ² μ΅λλ€.)
μ΄λ μ μκΈ°λ‘ λ¬Όμ μ¨μλ‘ ν μ§, λμλ‘ ν μ§, μΌμμΌλ‘ ν μ§ λ³κ²½μ΄ κ°λ₯ν©λλ€. μ΄λ μ€κ°μμ μν μ ν©λλ€.
λ§μ§λ§μΌλ‘ μ¬λμ΄ μνλ λ¬Όμ μλΉ( collect=ꡬλ
) νμ¬ λ¬Όμ λ§μ€ μ μμ΅λλ€.
μ΄λ flowλ λ¬Ό(data)μ κ°μΈκ³ μλ λ°°κ΄(λ°μ΄ν° μ€νΈλ¦Ό)μ΄ λ©λλ€.
flowλ λΉλκΈ° λ°©μμΌλ‘ μμ
μ μννκΈ°μ λμ©λ λ°μ΄ν°λ λ€νΈμν¬ μμ² λ±μ μκ°μ΄ μ€λ걸리λ μμ
μ UI μ€λ λλ₯Ό μ°¨λ¨νμ§ μκ³ μ²λ¦¬κ° κ°λ₯ν©λλ€.
λ λ€μν μ°μ°μλ₯Ό μ 곡νκΈ°μ 볡μ‘ν λ°μ΄ν° μ²λ¦¬ λ‘μ§μ κ°νΈνκ² κ΅¬νν μ μμ΅λλ€.
flowλ Cold Stream νΉμ±μΌλ‘ ꡬλ
μ΄ μμλ λλ§ λ°μ΄ν°λ₯Ό μμ±νλ―λ‘ μνλ μμ μ λ°μ΄ν°λ₯Ό μΊμνκ±°λ μ¬μ¬μ©νλ κ²μ΄ μ΄λ €μΈ μ μμ΅λλ€.
λ λΉλκΈ°μμΌλ‘ μμ
μ μννλ―λ‘ λ³΅μ‘ν λ°μ΄ν° νλ¦μ΄λ μ€λ₯ μν©μμμ λλ²κΉ
μ΄ μ΄λ €μΈ μ μμ΅λλ€.
μ΄λ² μκ°μ flowμ λν΄ μμ보μμ΅λλ€
λ€μ μκ°μ flowμ λ¨μ μ 보μν λ°©λ²μ λν΄ μμλ³΄κ² μ΅λλ€.