๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ | Kotlin/โœจ | ๊ฐœ๋…

[Kotlin] coroutine ๊ฐœ๋… ์ •๋ฆฌ

by immgga 2022. 4. 3.

์˜ค๋Š˜์€ ๋‚ด๊ฐ€ ๊ณต๋ถ€ํ–ˆ๋˜ ์ฝ”๋ฃจํ‹ด์˜ ๊ฐœ๋…์„ ์•Œ์•„๋ณด๊ฒ ๋‹ค.

 

์ฝ”๋ฃจํ‹ด์˜(coroutine) ๊ฐœ๋…

์ฝ”๋ฃจํ‹ด์€ kotlin์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ผ์ข…์ด๋‹ค.

์ตœ๊ทผ์— ์ฝ”ํ‹€๋ฆฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์ด ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ผ, ๊ตฌ๊ธ€์—์„œ๋„ ๊ฐ•๋ ฅํžˆ ์ถ”์ฒœํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋‹ค.


์ฝ”๋ฃจํ‹ด

  • ์ฝ”๋ฃจํ‹ด(coroutine)์€ ๋ฃจํ‹ด์˜ ์ผ์ข…
  • ์ฝ”๋ฃจํ‹ด์˜ "co" ๋Š”  with, together๋ฅผ ๋œปํ•œ๋‹ค.
  • ํ˜‘๋™ ๋ฃจํ‹ด์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋ฃจํ‹ด์˜ ํŠน์ง•

  • ์ฝ”๋ฃจํ‹ด์€ ์ด์ „์— ์ž์‹ ์˜ ์‹คํ–‰์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์ค‘๋‹จ๋œ ์ง€์ ์˜ ๋ฐ”๋กœ ๋‹ค์Œ ์žฅ์†Œ์—์„œ ์‹คํ–‰์„ ์žฌ๊ฐœํ•œ๋‹ค.

  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํžˆ ์ž‘์„ฑํ•ด์ค€๋‹ค.
  • ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ ์ฒ˜๋ฆฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

 

์ด์ œ ๊ฐœ๋…์„ ์•Œ์•˜์œผ๋‹ˆ, ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์ดํ•ดํ•ด ๋ณด์ž.


์ฝ”ํ‹€๋ฆฐ ์˜ˆ์ œ

GlobalScope.launch {
    // launch ์•ˆ์—์„œ ์ฝ”๋ฃจํ‹ด ์‹คํ–‰
    delay(1000L)
    println("World")    // 2
}
println("Hello")    // 1
Thread.sleep(2000L)

์ฝ”๋ฃจํ‹ด์€ launch์•ˆ์—์„œ ์‹คํ–‰์ด ๋œ๋‹ค.

๋จผ์ € Hello ๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ , ๊ทธ ๋‹ค์Œ์— 1์ดˆ delay ํ›„ World๊ฐ€ ์ถœ๋ ฅ์ด ๋˜๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” ํ•„์ž์˜ ์ง€์‹ ๋ถ€์กฑ์œผ๋กœ ๋ชจ๋ฅด๊ฒ ๋‹ค;;

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์— sleep ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.

 

๋ฐฉ๊ธˆ ์˜ˆ์ œ์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์˜ˆ์ œ๋ฅผ ์ค€๋น„ ํ•ด๋ดค๋‹ค.

thread {
    Thread.sleep(1000L)
    println("World")
}
println("Hello")
Thread.sleep(2000L)

์ด ์˜ˆ์ œ๋Š” GlobalScope.launch ๋Œ€์‹ ์— thread๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ์ด๋‹ค.

์—ญํ• ์€ GlobalScope.launch์™€ ๊ฐ™๋‹ค.

 

๋˜ ๋‹ค๋ฅธ ์˜ˆ์ œ

GlobalScope.launch {
    delay(1000L)
    println("World")
}
println("Hello")
runBlocking {
     delay(1000L)
}

์ด ์˜ˆ์ œ์—๋Š” Thread.sleep ๋Œ€์‹ ์— runBlocking์„ ์‚ฌ์šฉํ•ด delay ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค.

์›๋ž˜ delayํ•จ์ˆ˜๋Š” suspend fun์ด๋ผ์„œ ๊ทธ๋ƒฅ์€ ์“ธ์ˆ˜ ์—†๋Š”๋ฐ, runBlocking ์•ˆ์—์„œ๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค.

 

runBlocking๋„ GlobalScope.launch์™€ ๊ฐ™์€ ์—ญํ• ์ด๋‚˜ ์•ฝ๊ฐ„ ๋‹ค๋ฅด๋‹ค.

launch๋Š” ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ blockingํ•˜์ง€ ์•Š๋Š”๋ฐ,

runBlocking์€ ์ด๋ฆ„์—์„œ๋„ ์•Œ์ˆ˜ ์žˆ๋“ฏ์ด blocking์„ ํ•œ๋‹ค.


์—ฌ๊ธฐ๊นŒ์ง€ ๋‚ด๊ฐ€ ๊ณต๋ถ€ํ•œ ์ฝ”๋ฃจํ‹ด์˜ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋“ค์„ ์•Œ์•„๋ณด์•˜๋‹ค.

์ƒ๊ฐ๋ณด๋‹ค ๋„ˆ๋ฌด ๊ฐ„๋‹จํ•ด์„œ ์‹ค๋งํ–ˆ๋‹ค๋ฉด ๋ฏธ์•ˆํ•˜๋‹ค(์•„๋Š”๊ฒŒ ๋ณ„๋กœ ์—†์—ˆ๋‹ค;;)

์ง€์ ํ•  ๊ฒƒ๋“ค์ด ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

 

์ฐธ๊ณ ํ•  ๋งŒํ•  ๊ธ€๋“ค

https://whyprogrammer.tistory.com/596

 

[Android] ์ฝ”ํ‹€๋ฆฐ(Kotlin) ์ฝ”๋ฃจํ‹ด(Coroutine) ํ•œ ๋ฒˆ์— ๋๋‚ด๊ธฐ

1. ์ฝ”ํ‹€๋ฆฐ์˜ ์ฝ”๋ฃจํ‹ด(Coroutine) ์ด๋ž€? ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ํ•  ๋•Œ ์ฝ”๋ฃจํ‹ด ์ด๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”? ์ฝ”ํ‹€๋ฆฐ์˜ '์ฝ”'๋ฅผ ๋”ฐ์„œ 'Ko'๋ฃจํ‹ด ์ธ์ค„ ์•Œ์•˜์ง€๋งŒ ์‚ฌ์‹ค ์ฝ”๋ฃจํ‹ด์˜ ์ฝ”๋Š” co(ํ•จ๊ป˜,

whyprogrammer.tistory.com

728x90