๐ก ColdFlow , HotFlow์ ์ฐจ์ด์ ์ ํ์ธํ๊ณ ์์ฝํด๋ณด์.
Flow
์ฝํ๋ฆฐ ํ๋ก์ฐ๋ suspend function
์ ๋ณด์ํ๊ธฐ ์ํด ๋์จ ์น๊ตฌ์ด๋ค.
๋น๋๊ธฐ ๋์์ ๊ฒฐ๊ณผ๋ก suspend function
์ด ํ๋์ ๊ฒฐ๊ณผ๋ฌผ ๋์ง๋ค๋ฉด,
ํ๋ก์ฐ๋ฅผ ์ด์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ํ๋ ํ์์ผ๋ก ๋์ง ์ ์๋ค.
๋น๋๊ธฐ์ด๋ฉฐ ์ฝ๋ฃจํด์์๋ง ๋์ ๊ฐ๋ฅํ ๊ฒ์ suspend function
๊ณผ ๋์ผํ๋ค.
๋ค๋ฅธ ์ ์ ํจ์ ์์ suspend
๋ฅผ ๋ถ์ด์ง ์์๋ ๋๋ค.
flowOf()
์ฃผ์ด์ง ํญ๋ชฉ ์งํฉ์์ ํ๋ฆ์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.flowOf(4, 2, 5, 1, 7)
.collect {
Log.d(TAG, it.toString())
}
asFlow()
Type์ Flow๋ก ๋ณํํ ์ ์๋๋ก ๋์์ฃผ๋ ํ์ฅ ๊ธฐ๋ฅ์
๋๋ค.(1..5).asFlow()
.collect {
Log.d(TAG, it.toString())
}
flow{}
์ด๊ฒ์ด Flow์ Hello World ์์ ์์ ์ฌ์ฉํ ๊ฒ์
๋๋ค.flow {
(0..10).forEach {
emit(it)
}
}
.collect {
Log.d(TAG, it.toString())
}
channelFlow{}
์ด ๋น๋๋ ๋น๋ ์์ฒด์์ ์ ๊ณตํ๋ send๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ก ํ๋ฆ์ ์์ฑํฉ๋๋ค.channelFlow {
(0..10).forEach {
send(it)
}
}
.collect {
Log.d(TAG, it.toString())
}
cold stream
( kotlin์ sequence )์ผ๋ก ๋์ํ๋ฉฐ hot stream
์ ์ง์ํ์ง ์๋๋ค.
๊ทธ๋ ๊ธฐ์ ๋ฐ์ดํฐ๋ ์์ฒญํ ๋๋ง๋ค ์ฒ์๋ถํฐ ์๋ก ๋ฐํ๋๋ฉฐ,
์์ฒญ ์ ์๋ ์ ์ธ๋ง ์์ ๋ฟ ์๋ฌด๋ฐ ๋์๋ ํ์ง ์๋๋ค.
์ง์ ์ทจ์ํ ์ ์๋ ํจ์๋ ๋ฐ๋ก ์ ๊ณตํ์ง ์๋๋ค.
https://developer.android.com/kotlin/flow?hl=ko
ColdFlow
1 : 1
# [SharedFlow]
ํ๋์ ์๋น์(Consumer)์๊ฒ ๊ฐ์ ๋ณด๋
๋๋ค.
์์ฑ๋ ์ดํ์ ๋๊ตฐ๊ฐ ์๋นํ๊ธฐ ์์ํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ํ๊ฐ ๋ณํ์ง ์๋ ๊ฐ์ ์ฝ์ ๋
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฝ๊ฑฐ๋ URL์ ํตํด์ ์๋ฒ ๊ฐ์ ์ฝ๋ ๊ฒฝ์ฐ Cold Stream์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
HotFlow
1 : N
# [StateFlow]
ํ๋ ์ด์์ ์๋น์(Consumer)์๊ฒ ๊ฐ์ ๋ณด๋ผ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ๋ฐํ์ด ์์๋ ์ดํ ๋ถํฐ ๋ชจ๋ ์๋น์์๊ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ณ ๊ตฌ๋
์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ํ๊ฐ ๋ณํ๋ ๊ฐ์ ์ฝ์ ๋ ๋คํธ์ํฌ ์ํ ์ ๋ณด ๊ฐ์ ์ป์ด์ฌ ๋ Hot Stream์ ์ฌ์ฉํ ์ ์์ต๋๋ค.