๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ฑ| Android/๐Ÿ“˜ | ๊ธฐ๋ก

[Android] thread์™€ ํ•จ๊ป˜ ์•Œ์•„๋ณด๋Š” coroutine, flow์— ๋Œ€ํ•œ ๊ณ ์ฐฐ

by immgga 2024. 11. 12.

์ถœ์ฒ˜: unsplash.com

 

์ด๋ฒˆ ๊ณ ์ฐฐ์˜ ์ฃผ์ œ๋Š” coroutine์ด๋‹ค.

kotlin์„ ์‚ฌ์šฉํ–ˆ๊ฑฐ๋‚˜, ์‚ฌ์šฉ ์ค‘์ธ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ๋Š” ํ•ญ์ƒ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ฐœ๋…์ด๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŒ…์œผ๋กœ ํ™•์‹คํ•˜๊ฒŒ ๊ถ๊ธˆํ–ˆ๋˜ ๊ฒƒ๋“ค์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์งš๊ณ  ๋„˜์–ด๊ฐˆ ์˜ˆ์ •์ด๋‹ค.

 

coroutine์ด๋ž€?

coroutine์€ thread ์•ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ์ผ์‹œ ์ค‘๋‹จ ๊ฐ€๋Šฅํ•œ ์ž‘์—… ๋‹จ์œ„์ด๋‹ค.
ํ•˜๋‚˜์˜ thread์—์„œ ์—ฌ๋Ÿฌ coroutine์ด ์„œ๋กœ thread๋ฅผ ์–‘๋ณดํ•ด ๊ฐ€๋ฉฐ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์–ด์งธ์„œ coroutine์ด ์ƒ๊ฒจ๋‚˜๊ฒŒ ๋œ ๊ฑธ๊นŒ?

 

coroutine์€ ์™œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์„๊นŒ?

thread ๊ธฐ๋ฐ˜์˜ ๋‹ค์ค‘ thread ์ž‘์—…์˜ ํ•œ๊ณ„

coroutine ์ด์ „์˜ ๋™์‹œ์„ฑ ์ž‘์—…์€ ๋ชจ๋“œ thread ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๋‹ค.
thread ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด thread 1์˜ ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ์ค‘์— ๋‹ค๋ฅธ thread์˜ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ์—๋Š” thread 1์ด blocking ๋˜๊ณ  thread 2๊ฐ€ ์ž‘์—…ํ•˜๋Š” ํ˜•์‹์ด์—ˆ๋‹ค.

 

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•˜๋Š”๋ฐ, ์ด๋ฅผ andorid ๊ฐœ๋ฐœ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

android์—๋Š” main thread๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ์ด thread๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ thread์ด๋‹ค.

main thread์—์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ๋‹ค๋ฅธ thread ์ž‘์—…์œผ๋กœ ์ธํ•ด blocking ๋œ๋‹ค๋ฉด, ์‹คํ–‰๋˜๋Š” android ์•ฑ์€ ๋ฉˆ์ถค ํ˜„์ƒ์ด ์ƒ๊ธฐ๊ณ , ์ผ์ • ์‹œ๊ฐ„ ์ด์ƒ blocking ๋˜๋ฉด ์•ฑ์ด ๊ฐ•์ œ ์ข…๋ฃŒ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

์ž‘์—… ๋‹จ์œ„๊ฐ€ thread์ธ ์ž‘์—…๋“ค์€ ์ƒ์„ฑ ๋น„์šฉ์ด ๋ฐ”์‹ธ๊ณ  ์ž‘์—… ์ „ํ™˜ ๋น„์šฉ์ด ๋น„์‹ธ๋‹ค.
๋˜ํ•œ ๋‹ค๋ฅธ thread๋กœ๋ถ€ํ„ฐ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” thread๋Š” blocking ๋œ๋‹ค.
์ด ํŠน์„ฑ ๋•Œ๋ฌธ์— ํ•ด๋‹น thread๋Š” ํ•˜๋Š” ์ž‘์—… ์—†์ด ๋‹ค๋ฅธ ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์›์ด ๋‚ญ๋น„๋œ๋‹ค. ์ด๊ฒŒ ์ž‘์—… ๋‹จ์œ„๊ฐ€ thread์ธ ๊ฒฝ์šฐ ์ƒ๊ธฐ๋Š” ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ์ ๋“ค์ด๋‹ค.

 

 

coroutine์˜ ๊ธฐ์กด ๋ฌธ์ œ์  ๊ทน๋ณต ๋ฐฉ๋ฒ•

coroutine์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ์ง€๋‹Œ๋‹ค.

  • thread๋ฅผ ์‚ฌ์šฉํ•ด coroutine์„ ์‹คํ–‰
  • thread ์ƒ์˜ coroutine์€ ์–ธ์ œ๋“ ์ง€ ์ค‘๋‹จ ๊ฐ€๋Šฅ

์œ„ ํŠน์ง• ๋•Œ๋ฌธ์— coroutine์€ ๊ฒฝ๋Ÿ‰ thread๋กœ ๋ถˆ๋ฆฐ๋‹ค.

์ฝ”๋ฃจํ‹ด์€ ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.

  1. ์ฝ”๋ฃจํ‹ด 1์ด ์ƒ์„ฑ๋ผ thread 1์— ์‹คํ–‰ ์š”์ฒญ๋˜๊ณ , ์ฝ”๋ฃจํ‹ด 2๊ฐ€ ์ƒ์„ฑ๋ผ thread 2์—์„œ ์‹คํ–‰๋œ๋‹ค.
  2. ์ฝ”๋ฃจํ‹ด 1 ์‹คํ–‰ ๋„์ค‘ ์ฝ”๋ฃจํ‹ด 2์˜ ์ž‘์—… ๊ฒฐ๊ณผ๊ฐ€ ํ•„์š”ํ•ด์กŒ๋‹ค. ์ฝ”๋ฃจํ‹ด 2์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ฝ”๋ฃจํ‹ด 1์€ thread์˜ ์‚ฌ์šฉ๊ถŒ์„ ์–‘๋„ํ•œ๋‹ค.
  3. ์‚ฌ์šฉ๊ถŒ์„ ์–‘๋„๋ฐ›์€ ์ฝ”๋ฃจํ‹ด 3์ด ์Šค๋ ˆ๋“œ 1์—์„œ ์‹คํ–‰๋œ๋‹ค.
  4. ์ฝ”๋ฃจํ‹ด 3์ด ์‹คํ–‰์„ ๋งˆ์น˜๋ฉด ์Šค๋ ˆ๋“œ 1์˜ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ๋‹ค์‹œ ์ฝ”๋ฃจํ‹ด 1๋กœ ๋„˜๊ธด๋‹ค.
  5. ์ฝ”๋ฃจํ‹ด 2์˜ ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋ฉด ์ฝ”๋ฃจํ‹ด 1์€ ํ• ๋‹น๋ฐ›์€ ์ž‘์—…์ด ์—†๋Š” thread๋ฅผ ์‚ฌ์šฉํ•ด ์‹คํ–‰๋œ๋‹ค.
coroutine์€ thread๊ฐ€ ํ•„์š” ์—†์„ ๋•Œ thread์˜ ๊ถŒํ•œ์„ ์–‘๋ณดํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด thread๋ฅผ blocking ํ•˜๋Š” ์ƒํ™ฉ์ด ์ค„์–ด์„œ thread๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
coroutine์€ thread๊ฐ€ ํ•„์š” ์—†์–ด์ง€๋ฉด, thread๋ฅผ ์–‘๋ณดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ thread ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.

 

 

๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” ์•„๋ž˜์˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์ž.

[Coroutine] 1. ์ฝ”๋ฃจํ‹ด์€ ์–ด๋–ป๊ฒŒ ์Šค๋ ˆ๋“œ ์ž‘์—…์„ ์ตœ์ ํ™”ํ•˜๋Š”๊ฐ€?

 

[Coroutine] 1. ์ฝ”๋ฃจํ‹ด์€ ์–ด๋–ป๊ฒŒ ์Šค๋ ˆ๋“œ ์ž‘์—…์„ ์ตœ์ ํ™” ํ•˜๋Š”๊ฐ€?

Thread ๊ตฌ์กฐ์™€ ๋‹ค์ค‘ Thread ์ž‘์—…์˜ ํ•„์š”์„ฑ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค(Process) ์—๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ(Thread) ๊ฐ€ ์žˆ๊ณ , ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด JVM ํ”„๋กœ์„ธ์Šค ์ƒ์—์„œ๋Š” ์Šค๋ ˆ๋“œ๋Š” ๊ทธ๋ฆผ1

kotlinworld.com

 

thread๋ž€ ๋ฌด์—‡์ผ๊นŒ?

์ด์ œ coroutine์˜ ์ •์˜์™€ ์™œ ์‚ฌ์šฉ๋˜๋Š”์ง€๋ฅผ ์•Œ์•˜๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ๋Š” coroutine๊ณผ ์ž์ฃผ ์—ฎ์ด๋Š” thread๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฐ€๋ณ๊ฒŒ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

thread๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰์˜ ๋‹จ์œ„ ํ˜น์€ ํ”„๋กœ์„ธ์Šค์˜ ํŠน์ •ํ•œ ๊ฒฝ๋กœ์ด๋‹ค.
ํ”„๋กœ์„ธ์Šค๋Š” 4๊ฐ€์ง€์˜ ์˜์—ญ(stack, code, data, heap)์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. thread์ด ์˜์—ญ๋“ค ์ค‘ stack ์˜์—ญ์„ ๋…๋ฆฝ์ ์œผ๋กœ ํ• ๋‹น๋ฐ›๊ณ , ๋‚จ์€ 3๊ฐ€์ง€ ์˜์—ญ์€ ์—ฌ๋Ÿฌ thread๊ฐ€ ๊ณต์œ ํ•œ๋‹ค.

 

thread์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ๋งํฌ๋กœ.

CS - Thread ๋ž€?

 

CS - Thread ๋ž€?

Intro ์Šค๋ ˆ๋“œ… ๊ธฐ์ˆ  ์ธํ„ฐ๋ทฐ ๋‹จ๊ณจ ์งˆ๋ฌธ์ด์ง€๋งŒ ํ•ญ์ƒ ์ด๋Ÿฐ ๊ฒƒ์ด๋‹ค๋ผ๊ณ  ๋ช…ํ™•ํžˆ ์„ค๋ช…ํ•˜๊ธฐ ํž˜๋“ค์—ˆ๋˜ ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜๋ถ€ํ„ฐ๋Š” ๋ˆ„๊ตฐ๊ฐ€ ๋ฌผ์–ด๋ดค์„ ๋•Œ ์Šค๋ ˆ๋“œ๋Š” ๋ฐ”๋กœ ์ด๊ฒƒ์ด์ง€ ํ•˜๊ณ  ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ณต๋ถ€ํ•ด

kasroid.github.io

 

coroutine vs thread

์ด๋ฏธ ์œ„์— ์–ด๋Š ์ •๋„ ์–ธ๊ธ‰๋˜์–ด ์žˆ์ง€๋งŒ, ๋‹ค์‹œ ์ด ๋ถ€๋ถ„์— ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.

  • thread๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰์˜ ๋‹จ์œ„์ด๋‹ค.
    coroutine์€ thread ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋œ๋‹ค.
  • thread๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉ ์ค‘์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์ž‘์—…์€ ๋ชจ๋‘ blocking ์ƒํƒœ๊ฐ€ ๋˜์ง€๋งŒ,
    coroutine์€ ์ž‘์—… ํ•˜๋‚˜ํ•˜๋‚˜ ๋ชจ๋‘ ํ•„์š”ํ•ด์กŒ์„ ๋•Œ, ์ž‘์—…๋“ค์„ ์ž์œ ๋กญ๊ฒŒ switching ํ•˜๋ฉด์„œ ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” ์•„๋ž˜์˜ ๊ธ€ ์ฐธ๊ณ .

๐Ÿค” Thread vs Coroutine ์ „๊ฒฉ ๋น„๊ต

 

๐Ÿค” Thread vs Coroutine ์ „๊ฒฉ ๋น„๊ต

๋น„์Šทํ•ด๋ณด์ด๋Š” ๋‘ ๋…€์„์˜ ์ฐจ์ด์ ์„ ํŒŒํ—ค์ณ๋ณด์ž!

velog.io

 

kotlin์˜ flow

๊ฐ‘์ž๊ธฐ flow๋กœ ์ ํ”„ํ•œ ์ด์œ ๋Š” coroutine์„ ๊ณต๋ถ€ํ•œ ๋ชฉ์ ์ด flow์˜ ๊ฐœ๋…์„ ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ์˜€๋‹ค.

 

kotlin์˜ flow๋ž€ ๋ฌด์—‡์ผ๊นŒ?

์ฝ”ํ‹€๋ฆฐ์˜ flow๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ’์„ ๋ณด๋‚ด๊ณ  ์ •์ƒ์ ์œผ๋กœ ๋˜๋Š” ์˜ˆ์™ธ๋กœ ์™„๋ฃŒ๋˜๋Š” ๋น„๋™๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์ด๋‹ค.
์ฆ‰, coroutine ์ƒ์—์„œ ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์ด๋‹ค.

 

flow๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ์ด์œ 

  • ์ฝœ๋ฐฑ๊ณผ ๋ฆฌ์Šค๋„ˆ์˜ ํ•œ๊ณ„
    ๊ธฐ์กด์—๋Š” ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ฝœ๋ฐฑ๊ณผ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๊ตฌํ˜„ํ–ˆ์—ˆ๋‹ค.
    ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋ฐฉ์‹์€ ๋งŽ์€ ์ฝœ๋ฐฑ๊ณผ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ , ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ ธ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ดํ›„์— live data, rx java์™€ ๊ฐ™์€ ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ๋‚˜์˜ค๊ฒŒ ๋˜๊ณ , ๋” ๋‚˜์•„๊ฐ€ coroutine๊ณผ flow๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๋ฉด์„œ ์œ„์˜ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

flow์˜ ์žฅ์ 

  1. ๋น„๋™๊ธฐ ์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
    flow๋Š” ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด, ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๊ธฐ ์ „๊นŒ์ง€ suspend ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
  2. coroutine๊ณผ์˜ ํ†ตํ•ฉ
    flow๋Š” coroutine๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. coroutine์˜ suspend ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, coroutine์˜ ๋™์‹œ์„ฑ๊ณผ ๋น„๋™๊ธฐ์„ฑ์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 
  3. cold stream ์ง€์›
    flow๋Š” cold stream์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด, ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด collect ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด, ์ƒํ™ฉ์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. ์—ฐ์‚ฐ์ž ์ง€์›
    flow๋Š” ์—ฐ์‚ฐ์ž(operator)๋ฅผ ์ง€์›ํ•ด, ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  5. backpressure ์ฒ˜๋ฆฌ
    flow๋Š” backpressure ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ์˜ ์ƒ์‚ฐ ์†๋„์™€ ์†Œ๋น„ ์†๋„๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๋•Œ๋„ ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

cold stream?

ํ•œ ๊ฐœ์˜ flow๊ฐ€ ํ•˜๋‚˜์˜ ์†Œ๋น„์ž์—๊ฒŒ๋งŒ ๊ฐ’์„ ๋ณด๋‚ธ๋‹ค.

์†Œ๋น„์ž๊ฐ€ ์†Œ๋น„๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ, ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์†Œ๋น„์ž๊ฐ€ ์†Œ๋น„ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์ŠคํŠธ๋ฆผ ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ๋œ๋‹ค.

 

backpressure?

์ƒ์‚ฐํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„์ž๊ฐ€ ๊ฐ๋‹นํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋œปํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ดˆ๋‹น 100๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์‚ฐ๋  ๋•Œ, ์†Œ๋น„์ž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ 1์ดˆ์— 1๊ฐœ ์‚ฌ์šฉํ•  ๋•Œ, ์†Œ๋น„์ž๋Š” ๋„˜์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ๋‹นํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๋ฐ์ดํ„ฐ๋Š” ๊ณ„์† ์Œ“์ด๊ฒŒ ๋˜๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋” ๋งŽ์€ ์ •๋ณด๋Š” ์•„๋ž˜ ๊ธ€๋“ค์„ ์ฐธ๊ณ .

Kotlin ์ฝ”ํ‹€๋ฆฐ์˜ Flow

 

Kotlin ์ฝ”ํ‹€๋ฆฐ์˜ Flow

์ตœ๊ทผ ํšŒ์‚ฌ์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ Flow์™€ stateflow๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ณ ์žˆ๋‹ค. ์˜ค๋Š˜์€ Flow์™€ Stateflow์— ๋Œ€ํ•ด์„œ ๋‚ด๊ฐ€ ์•Œ๊ณ ์žˆ๋Š”๊ฒƒ์„ ์ž์„ธํžˆ ์ •๋ฆฌํ•˜๋ ค๊ณ ํ•œ๋‹ค. ๊ธฐ์กด์—๋Š” ์ฝ”ํ‹€๋ฆฐ์˜

youngdroidstudy.tistory.com

[์•ˆ๋“œ๋กœ์ด๋“œ] Coroutine Flow

 

[์•ˆ๋“œ๋กœ์ด๋“œ] Coroutine Flow

https://developer.android.com/kotlin/flow?hl=ko Android์—์„œ์˜ Kotlin ํ๋ฆ„ | Android Developers ์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Android์—์„œ์˜ Kotlin ํ๋ฆ„ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •

snaildeveloper.tistory.com

[Kotlin] Flow์—์„œ ColdStream๊ณผ HotStream์˜ ์ฐจ์ด

 

[Kotlin] Flow์—์„œ ColdStream๊ณผ HotStream์˜ ์ฐจ์ด

Cold Stream ํ•˜๋‚˜์˜ ์†Œ๋น„์ž(Consumer)์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค. (UniCast) ์†Œ๋น„์ž๊ฐ€ ์†Œ๋น„๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์ŠคํŠธ๋ฆผ ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. Hot Stream ์—ฌ๋Ÿฌ๊ฐœ์˜ ์†Œ๋น„์ž์—๊ฒŒ

develop-oj.tistory.com

 

์ •๋ฆฌ

coroutine์˜ ์ •์˜์™€ coroutine์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ์„ ๊ณต๋ถ€ํ–ˆ๊ณ , thread์™€์˜ ์ฐจ์ด์ ์„ ๊ณต๋ถ€ํ–ˆ๋‹ค.

kotlin flow์— ๋Œ€ํ•ด์„œ๋„ ๊ณต๋ถ€ํ–ˆ์ง€๋งŒ, ์ด ๋ถ€๋ถ„์€ ๋” ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์•„์ง ์ดํ•ด๋„๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค.

 

728x90