개복치개발자 강의는 아래의 링크에서 확인할 수 있습니다.
개복치개발자 | Linktree
uyalae@naver.com
linktr.ee
코루틴에 대해서 한번 알아보겠습니다.
코루틴을 처음 봤을 때가 생각이 나는데, 처음 보는 느낌은 그냥 쓰레드인데? 백그라운드 작업 할 때 쓰라는건가? 라는 생각이었습니다.
찾아보면 light-weight Thread고 쓰레드보다 자원을 아껴쓴다 뭐 이렇게 나와있습니다.

아니 뭐 자원을 아껴쓰고 어쩌고 하면 좋은 건데... 라고 하는건데 쓰면 좋다는건 알겠는데 뭔가 와닿지가 않고 여기까지 오면
성능 그거 조금 좋아져봤자 뭐 크게 달라지는거 있나? 라는 생각이 들 수 있습니다.
자, 그렇다면 좀 더 와닿는 예제를 한번 해볼까요?
기존의 쓰레드를 이용한 예제를 한번 해보겠습니다.
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) | |
} | |
} |
이렇게 하면 당연히
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) | |
} |

위와 같이 사용할 수 있습니다.
자 그렇다면 순차적으로 나오면 뭐가 좋은데? 라고 하면
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 |