์ค๋์ ๋ด๊ฐ ๊ณต๋ถํ๋ ์ฝ๋ฃจํด์ ๊ฐ๋ ์ ์์๋ณด๊ฒ ๋ค.
์ฝ๋ฃจํด์(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์ ํ๋ค.
์ฌ๊ธฐ๊น์ง ๋ด๊ฐ ๊ณต๋ถํ ์ฝ๋ฃจํด์ ๊ฐ๋จํ ์์ ๋ค์ ์์๋ณด์๋ค.
์๊ฐ๋ณด๋ค ๋๋ฌด ๊ฐ๋จํด์ ์ค๋งํ๋ค๋ฉด ๋ฏธ์ํ๋ค(์๋๊ฒ ๋ณ๋ก ์์๋ค;;)
์ง์ ํ ๊ฒ๋ค์ด ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.
์ฐธ๊ณ ํ ๋งํ ๊ธ๋ค
'๐ | Kotlin > โจ | ๊ฐ๋ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin] ์์(Inheritance) (0) | 2024.06.14 |
---|---|
[Kotlin] ๋ฐฐ์ด๊ณผ Map์ ๋ํด ์์๋ณด๊ธฐ (0) | 2023.10.27 |