๋ฐ์ํ
Why Coroutine?
Ref.
Youtube : [์์ฐจ์, ์ฝํ๋ฆฐ ์ฝ๋ฃจํด] https://youtube.com/playlist?list=PLbJr8hAHHCP5N6Lsot8SAnC28SoxwAU5A
Ref : https://kotlinlang.org/
[ ์ค์ํ ๊ฐ๋
]
* Coroutine Builder → [launch] , [runBlocking]
* Scope → [CoroutineScope] , [GlobalScope]
* Suspend function → [suspend] , [delay()], [join()]
* Structured Concurrency
[↓์์ ] Coroutine๊ณผ Job ์ ๋ํด ์ดํดํ๊ธฐ ์ฌ์ด ์์
runBlocking {
GlobalScope.launch {
delay(3000L) // ์ด๋ ๊ฒ ๋๋ฉด ์๋ 2์ด ํ ์ข
๋ฃ, ์ฝ๋ฃจํด์ 3์ด ํ ์คํํ๊ณ ์ถ์ ๊ฑฐ๋ ์ฒ๋ฆฌ๊ฐ ์๋จ.
println("World!")
}
println("Hello,")
delay(2000L)
}
val job = GlobalScope.launch {
delay(3000L)
println("World!")
}
println("Hello")
job.join() // join์ ํตํด job ์ด ์๋ฃ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์ ์๊ฒ ๋จ.
// Structured concurrency :
// ๊ธฐ๋ค๋ฆฌ๊ธฐ ์ํด sleep ์ด๋ job.join()์ ํ๋๋ฐ ์ด๊ฒ๋ณด๋ค ์ข์ ๋ฐฉ๋ฒ์ด ์๋ค! ๋ฐ๋ก!
fun main() = runBlocking {
// val job = GlobalScope → this ( GlobalScope ์์ Coroutine Scope๋ก)
this.launch {
delay(1000L)
println("World!")
}
// this ์๋ต ๊ฐ๋ฅ - ๋๋ค ์์ชฝ์ this ์๊ธฐ ๋๋ฌธ์
launch {
delay(1000L)
println("World!")
}
println("Hello,")
// job.join() // ์ด๋ฐ์์ผ๋ก ๊ด๋ฆฌ ํด์ค๋ค๋ฉด, job.join() , job1.join(), job2.join() ์ด๋ฐ ์์ผ๋ก ์ฐ๋ฉด ๋ณต์กํด์ง๋ค. ์ด๋ฐ๊ฑฐ ๋ฐฉ์ง ์ํจ.
// runBlocking ๊ณผ launch ์ฝ๋ฃจํด์ด ๊ตฌ์กฐ์ ์ผ๋ก ๊ด๊ณ๋ฅผ ๊ฐ๋๋ค๋ฉด, ์๋ก ๊ธฐ๋ค๋ ค์ฃผ๊ณ ์ด ์ ์์ง ์๊ฒ ๋๊ฐ!
// >> ํ๋ ๋ฒจ ์ฝ๋ฃจํด์ ๋ง๋ค์ง ๋ง๊ณ , ํด๋น ๋ฃจํด์ ์ฐจ์ผ๋๋ก ์ฝ๋ฃจํด์ ๋ง๋ค๋ฉด,
// ์์ ๋ถ๋ชจ ์ฝ๋ฃจํด์ด ์ฐจ์ผ๋ ์ฝ๋ฃจํด ์๋ฃ๋๋ ๊ฒ๊น์ง ๊ธฐ๋ค๋ ค์ฃผ๋
// ๊ตฌ์กฐ์ ์ธ ํํ๋ฅผ ๊ด๋ฆฌํด๋ผ~
}
[↓์์ ] Structured Concurrency๋ฅผ ๋ง๋ค์ด์ ์ฝ๋ฃจํด ๋ ๊ฐ๋ฅผ ๋ง๋ ๋ค.
fun main() = runBlocking {
launch {
repeat(5){
i -> println("์ฝ๋ฃจํด A ${i}")
delay(10L) // suspend function ์ธ delay๋ฅผ ์ฃผ๋ฉด
// ์์ ์ผ์ ์ค๋จ ํ์๊ฐ ๋จ (์ฝ๋ฃจํด B์ ์ค๋จ ํจ์๊ฐ ์์ผ๋ฉด B๊ฐ ๋ค์ ์คํ๋๊ณ A ๋ก ๋์์ด)
}
}
launch {
repeat(5){
i->println("์ฝ๋ฃจํด B ${i}")
delay(10L)
}
}
println("Coroutine Outer")
}
// ์ด๋ค ์ค๋ ๋์์ ์คํ์ด ๋์๋์ง print ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋
fun <T>println(msg: T){
kotlin.io.println("$msg [ ${Thread.currentThread().name} ]")
}
์ถ๋ ฅ ๊ฒฐ๊ณผ
Coroutine Outer [ main ]
์ฝ๋ฃจํด A 0 [ main ]
์ฝ๋ฃจํด B 0 [ main ]
์ฝ๋ฃจํด A 1 [ main ]
์ฝ๋ฃจํด B 1 [ main ]
์ฝ๋ฃจํด A 2 [ main ]
์ฝ๋ฃจํด B 2 [ main ]
์ฝ๋ฃจํด A 3 [ main ]
์ฝ๋ฃจํด B 3 [ main ]
์ฝ๋ฃจํด A 4 [ main ]
์ฝ๋ฃจํด B 4 [ main ]
๋ฐ์ํ
'Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[3] Kotiln Coroutines - Suspending Function (0) | 2021.07.27 |
---|---|
[2] Kotiln Coroutines - Cancelation / TimeOut (0) | 2021.07.26 |
Kotlin : Repeat / Git Overide r-- r-- r-- ํด๊ฒฐ (0) | 2021.07.23 |
[๋ฏธ์ Kotlin_Android] MVVM ํจํด (0) | 2021.07.19 |
IntelliJ ์ค์น ์ ์ปดํ์ผ ์ค๋ฅ (0) | 2021.07.19 |
๋๊ธ