Android Jetpack

Coroutine - 1 (Coroutine이란?)

----___<<<<< 2022. 2. 20. 19:16

개복치개발자 강의는 아래의 링크에서 확인할 수 있습니다.

 

개복치개발자 | Linktree

uyalae@naver.com

linktr.ee

 

 코루틴에 대해서 한번 알아보겠습니다.

 

 코루틴을 처음 봤을 때가 생각이 나는데, 처음 보는 느낌은 그냥 쓰레드인데? 백그라운드 작업 할 때 쓰라는건가? 라는 생각이었습니다.

 

 찾아보면 light-weight Thread고 쓰레드보다 자원을 아껴쓴다 뭐 이렇게 나와있습니다.

 

https://stackoverflow.com/questions/63719766/why-kotlin-coroutines-are-considered-light-weight

 

 

 아니 뭐 자원을 아껴쓰고 어쩌고 하면 좋은 건데... 라고 하는건데 쓰면 좋다는건 알겠는데 뭔가 와닿지가 않고 여기까지 오면

 

 성능 그거 조금 좋아져봤자 뭐 크게 달라지는거 있나? 라는 생각이 들 수 있습니다.

 

 자, 그렇다면 좀 더 와닿는 예제를 한번 해볼까요?

 

 기존의 쓰레드를 이용한 예제를 한번 해보겠습니다.

 

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
SimpleThread1().start()
SimpleThread2().start()
}
}
class SimpleThread1() : Thread() {
override fun run() {
Log.d("SimpleThread1", "p1")
sleep(1000)
Log.d("SimpleThread1", "p2")
sleep(1000)
}
}
class SimpleThread2() : Thread() {
override fun run() {
Log.d("SimpleThread2", "p3")
sleep(1000)
Log.d("SimpleThread2", "p4")
sleep(1000)
}
}
view raw MainActivity.kt hosted with ❤ by GitHub

 

 이렇게 하면 당연히 

 

 p1 -> p2 -> p3 -> p4 이런 순서로 되야할 것 같지만 비동기로 실행되면 아래와 같이 됩니다.

 

 

 그러면 코루틴을 이용하면 어떻게 바꿀 수 있는가? 에 대해서 보면 아래와 같이 보면 순차적으로 나옵니다.

 

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
start()
}
}
fun start() = runBlocking {
test1()
test2()
}
suspend fun test1(){
Log.d("test1 : ", "p1")
delay(1000)
Log.d("test1 : ", "p2")
delay(1000)
}
suspend fun test2(){
Log.d("test2 : ", "p3")
delay(1000)
Log.d("test2 : ", "p4")
delay(1000)
}
view raw MainActivity.kt hosted with ❤ by GitHub

 

 

 

 위와 같이 사용할 수 있습니다.

 

 자 그렇다면 순차적으로 나오면 뭐가 좋은데? 라고 하면 

 

 callback hell 문제를 해결할 수 있습니다.

 

 user정보를 받아와서 user에 이름으로 api call을 하는 문제라면 이 부분을 쉽게 해결할 수 있습니다.

 

 - 참조

 

https://dduddublog.tistory.com/194

 

Kotlin Coroutine 101 영상 번역 및 요약

youtu.be/ZTDXo0-SKuU Coroutine은 어떤 문제들을 해결할 수 있는가? - 안드로이드 비동기 프로그래밍을 단순화 함. 우리가 비동기 프로그래밍을 말할 때는 동기적 프로그래밍 방식을 빼놓을 수 없다. 동

dduddublog.tistory.com

 

'Android Jetpack' 카테고리의 다른 글

Coroutine - 3 (Room + Coroutine)  (1) 2022.02.27
Coroutine - 2 (Dispatchers)  (0) 2022.02.22
Jetpack Navigation - 6 (Animation)  (0) 2022.02.19
Jetpack Navigation - 5 (Safe Args)  (0) 2022.02.19
Jetpack Navigation - 4 (Data Transfer)  (0) 2022.02.19