Android

Flow Cold Stream(์ฝœ๋“œ ์ŠคํŠธ๋ฆผ), Hot Stream(ํ•ซ ์ŠคํŠธ๋ฆผ)

mygomii 2024. 5. 24. 20:19
๋ฐ˜์‘ํ˜•

๐Ÿ’ก๋ชฉํ‘œ

  • Cold Stream, Hot Stream์„ ์ดํ•ดํ•œ๋‹ค.

๐Ÿ“ ์ •๋ฆฌํ•˜๊ธฐ

Cold Stream

  • ํ•˜๋‚˜์˜ ์†Œ๋น„์ž์—๊ฒŒ ๊ฐ’์„ ๋ณด๋ƒ„
  • ์ƒ์„ฑ๋œ ์ดํ›„์— ๋ˆ„๊ตฐ๊ฐ€ ์†Œ๋น„ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๋ฐœํ–‰
  • ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์ฝ์„ ๋•Œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์ฝ๊ฑฐ๋‚˜ URL์„ ํ†ตํ•ด์„œ ์„œ๋ฒ„๊ฐ’์„ ์ฝ๋Š” ๊ฒฝ์šฐ ๊ตฌํ˜„
  1. flow ์ƒ์„ฑ: flow ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝœ๋“œ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑ. ์ด๋•Œ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์„ emit ์œผ๋กœ ๋ฐฉ์ถœ → ์ŠคํŠธ๋ฆผ์ด ์‹œ์ž‘๋  ๋•Œ ๋กœ๊ทธ ์ถœ๋ ฅ
  2. ๊ตฌ๋… ์ „ ์ƒํƒœ: ์ŠคํŠธ๋ฆผ์ด ์ƒ์„ฑ๋˜์—ˆ์ง€๋งŒ ์•„์ง ์ˆ˜์ง‘์ž๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์•„๋ฌด๋Ÿฐ ์ž‘์—…๋„ ์ˆ˜ํ–‰ x
  3. ๊ตฌ๋…: ์ฒซ ๋ฒˆ์งธ ๊ตฌ๋…์ž๋Š” launch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋ฃจํ‹ด์„ ์‹œ์ž‘ํ•˜๊ณ , coldFlow.collect๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ŠคํŠธ๋ฆผ์„ ๊ตฌ๋… ์ด๋•Œ ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฉ์ถœํ•˜๊ธฐ ์‹œ์ž‘
  4. ๋‘ ๋ฒˆ์งธ ๊ตฌ๋…์ž: ๋‘ ๋ฒˆ์งธ ๊ตฌ๋…์ž๋Š” 3์ดˆ ํ›„์— ์ŠคํŠธ๋ฆผ์„ ๊ตฌ๋…ํ•˜๊ธฐ ์‹œ์ž‘. ์ด ๊ตฌ๋…์ž๋Š” ๊ตฌ๋… ์‹œ์ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘
  5. joinAll ์‚ฌ์šฉ: ๋ชจ๋“  ์ฝ”๋ฃจํ‹ด ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ joinAll์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ธฐ

๊ฐ ๊ตฌ๋…์ž๊ฐ€ ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ฝœ๋“œ ์ŠคํŠธ๋ฆผ์˜ ํŠน์„ฑ์„ ๋ณด์—ฌ์คŒ. ์ฝœ๋“œ ์ŠคํŠธ๋ฆผ์€ ๊ตฌ๋…์ž๊ฐ€ ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ ์‹œ์ž‘๋˜๋ฉฐ, ๊ฐ ๊ตฌ๋…์ž๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘

 

Hot Stream

  • ํ•˜๋‚˜ ์ด์ƒ์˜ ์†Œ๋น„์ž์—๊ฒŒ ๊ฐ’์„ ๋ณด๋ƒ„
  • ๋ฐ์ดํ„ฐ ๋ฐœํ–‰์ด ์‹œ์ž‘ ๋œ ์ดํ›„๋ถ€ํ„ฐ ๋ชจ๋“  ์†Œ๋น„์ž์—๊ฒŒ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ๊ตฌ๋…์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ๋ฐ์ดํ„ฐ ๋ฐœํ–‰
  • ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ฐ’์„ ์ฝ์„ ๋•Œ ๋„คํŠธ์›Œํฌ ์ƒํƒœ ์ •๋ณด ๊ฐ’์„ ์–ป์–ด์˜ฌ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

 

  1. MutableSharedFlow ์ƒ์„ฑ: MutableSharedFlow๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ซ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑ
  2. ๋ฐ์ดํ„ฐ ๋ฐฉ์ถœ:  launch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋ฃจํ‹ด์„ ์‹œ์ž‘ํ•˜๊ณ , repeat์™€ delay๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 1์ดˆ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฉ์ถœ. sharedFlow.emit์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆผ์— ๋ฐฉ์ถœ
  3. ์ฒซ ๋ฒˆ์งธ ๊ตฌ๋…์ž: ์ฒซ ๋ฒˆ์งธ ๊ตฌ๋…์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋˜์ž๋งˆ์ž ์ŠคํŠธ๋ฆผ์„ ๊ตฌ๋… sharedFlow.collect๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘
  4. ๋‘ ๋ฒˆ์งธ ๊ตฌ๋…์ž: ๋‘ ๋ฒˆ์งธ ๊ตฌ๋…์ž๋Š” 5์ดˆ ํ›„์— ์ŠคํŠธ๋ฆผ์„ ๊ตฌ๋…ํ•˜๊ธฐ ์‹œ์ž‘. ์ด ๊ตฌ๋…์ž๋Š” ๊ตฌ๋… ์‹œ์ ๋ถ€ํ„ฐ ๋ฐฉ์ถœ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘
  5. joinAll ์‚ฌ์šฉ: ๋ชจ๋“  ์ฝ”๋ฃจํ‹ด ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ joinAll ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ธฐ

⇒ ๊ฐ ๊ตฌ๋…์ž๊ฐ€ ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ํ•ซ ์ŠคํŠธ๋ฆผ์˜ ํŠน์„ฑ์„ ๋ณด์—ฌ์คŒ

 

git repository

 https://github.com/mygomii/mygomii-study/tree/main/stream

๋ฐ˜์‘ํ˜•