#1 ์ด์ ๊ธ
[Kotlin] Coroutines - ๋๊ธฐ ์ฝ๋, ๋น๋๊ธฐ ์ฝ๋
#1 ๋๊ธฐ ์ฝ๋ vs ๋น๋๊ธฐ ์ฝ๋ #1-1 ๊ตฌ๋ถํ๊ธฐ ์ฝ๋ฃจํด์ ์ ๋๋ก ์ฌ์ฉํ๊ธฐ ์ํด์ ๋จผ์ , '๋๊ธฐ ์ฝ๋'์ '๋น๋๊ธฐ ์ฝ๋(= ์ฝ๋ฃจํด ์ฝ๋)'๋ฅผ ๋ช ํํ๊ฒ ๊ตฌ๋ถํ ์ค ์์์ผ ํ๋ค. ๋์ ๊ตฌ๋ถํ๋ ๊ธฐ์ค์ ์ฝ๊ฒ ๋ง
kenel.tistory.com
์ด์ ๊ธ์์ ๋ค๋ฃฌ Suspend๋ผ๋ ๊ฐ๋
์, "์ค๋ ๋๋ฅผ Blockํ๋ค"๋ผ๊ณ ๋งํ ๋์ Block๊ณผ ๋น์ทํ๋ฉด์๋ ๋ค๋ฅธ ๊ฐ๋
์ด๋ค. ๋์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ์ง์ด๋ณธ๋ค.
#2 Suspend vs Block
#2-1 ๊ณตํต์
๋ ๋ค ์ค๋ ๋์ ๋์์ ๋ฉ์ถ๋ค. ํ์ง๋ง, ์ด '๋ฉ์ถค'์ด๋ผ๋ ๊ฒ์ 2๊ฐ์ง ์์์ ๋๋ฉฐ, ์๋ก ๊ตฌ๋ถ๋๋ค.
#2-2 ์ฐจ์ด์
๋น์ ๋ฅผ ํตํด ์ค๋ช ํ๊ฒ ๋ค.
์ด๋ค ์ฌ๋ฏธ์๋ ๋์์์ด ์ฌ์๋๊ณ ์๋ ์ํฉ์ด๋ค.
1. ๋ นํ๋ ์ธ์ฝ๋ฉ์ ์๋ชปํ ๊ฒ์ธ์ง, ๋ถ๋ช ํ '์ฌ์ ์ค' ์ํ์ธ๋ฐ ๋์์์์ ์ ์ง ํ๋ฉด์ด ๊ณ์๋๋ค.
2. ๋์์ ํ๋ ์ด์ด์ '์ผ์ ์ ์ง' ๋ฒํผ์ ๋๋ฌ ๋์์์ ๋ฉ์ถ๋ค.
1๋ฒ๊ณผ 2๋ฒ ์ด๋ ์ชฝ์ด๋ ๋์์์ด ๋ฉ์ถฐ ์๋ค๋ ๊ฒ์ ๊ฐ๋ค. ํ์ง๋ง, ๊ทธ ์์์ ๋ค๋ฅด๋ค. Suspend์ Block๋ ๊ฐ๊ฐ 1๋ฒ๊ณผ 2๋ฒ์ผ๋ก ๋น์ ๋ ์ ์๋ค. Suspend๋ ์ฝ๋ ์์ฒด์์ '๋ฉ์ถค'์ ์ํํ๋ค. ๋ฐ๋ฉด, Block์ ์ค๋ ๋๋ฅผ ์ ๊ฐ๋ฒ๋ ค ์ฝ๋์ ์์ฌ์๋ ๊ด๊ณ์์ด ์ฝ๋์ ๋์์ ์ ํํ๋ค (๋ฌผ๋ก , Block ๋ํ ์ฝ๋๋ก ํ๋ ๊ฒ์ด๊ธด ํ๋ค). ์ฆ ์ ์๋ ์ฃผ์ฒด์ ์ผ๋ก ๊ธฐ๋ค๋ฆฌ๊ณ , ํ์๋ ์ธ๋ถ์ ๋ช
๋ น์ผ๋ก ์ธํด ์ฝ๋๊ฐ ์ผ์ด๋ฒ๋ฆฐ๋ค.

#2-1์ ๋น์ ๋ฅผ ํ๋ฒ ๋ ์ ์ฉํด๋ณด์๋ฉด, Suspend๋ ๋ฐฉ์ก ๋๊ธฐ ํ๋ฉด๊ณผ ๊ฐ๋ค. ๋ฐฉ์ก ์ค๋น๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค. (์ด๋ ๋์์ ํ๋ ์ด์ด์์ '์ผ์ ์ค์ง' ๋ฒํผ์ ๋๋ฅด๋ Block๊ณผ๋ ๋ถ๋ช
ํ ๋ค๋ฅด๋ค.)
#3 Block์ ๋๊ธฐ ์ฝ๋, Suspend๋ ๋น๋๊ธฐ ์ฝ๋
Block์ ์ค๋ ๋๋ฅผ ์ผ๋ ธ๋ค ๋
น์ผ ๋ฟ, ๊ทธ ๋ชฉ์ ์ด ๋ณ๋ ฌ ๊ตฌ์กฐ ๊ตฌํ์ด ์๋๋ค. ๋ฐ๋ฉด, Suspend๋ ๋ณ๋ ฌ ๊ตฌ์กฐ ๊ตฌํ์ ์ํด ์ฌ์ฉํ๋ค. ๋ฐ๋ผ์ Suspendํ๋ ์์
์ด ์๋ค๋ฉด ๊ทธ ์ฝ๋๋ ๋น๋๊ธฐ ์ฝ๋๋ผ๊ณ ๋ด๋ ๋ฌด๋ฆฌ๊ฐ ์๋ค.
#4 ์์ฝ
Suspend๋ ๋ฉ์ถ๋ค๊ธฐ๋ณด๋จ, ๊ธฐ๋ค๋ฆฐ๋ค. ์ ๋ง ๋ฉ์ถ๋ ๊ฒ์ Block์ด๋ค.
'๊นจ์ ๊ฐ๋ ๐ > Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin] Coroutines - Coroutine builder (0) | 2024.02.12 |
---|---|
[Kotlin] Coroutines - CoroutineScope, CoroutineContext (1) | 2024.02.10 |
[Kotlin] Coroutines - ๋๊ธฐ ์ฝ๋, ๋น๋๊ธฐ ์ฝ๋ (0) | 2024.02.08 |
[Kotlin] Coroutines - ๊ธฐ์ด (0) | 2024.02.07 |
[Kotlin] ๋๋ค(Lambda) ํํ์ (0) | 2024.02.01 |