Problem
기존 Java
로 작성된 코드를 Kotlin
으로 변환할때 어떻게 하면 더 Kotlin
스타일에 맞게 변환할 수 있을까하는 고민을 하게 됐다. 동일하게 AsyncTask
로 변환 할 수도 있지만 조금 더 Kotlin
스타일로 변환 할 수 있는지 확인해 보고자 한다.
AsyncTask.execute(new Runnable() {
@Override
public void run() {
...
Solution
coroutine
은 Kotlin
1.3 버전에서 추가되었다. 그 이상 버전을 사용하는 경우만 해당한다. Kotlin
의 coroutine
를 사용하면 간단하면서 더 많은 작업을 할 수 있다1.
먼저, Android
프로젝트라면 앱의 build.gradle
파일에 다음 종속 항목을 추가한다.
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
}
그리고 AsyncTask
부분을 아래 처럼 변환해 보자.
CoroutineScope(Dispatchers.Main).launch {
...
CoroutineScope
의 파라미터로 들어가는 Dispatchers
의 설명은 다음과 같다.
- Dispatchers.Default
- 기본값, 백그라운드 스레드 풀 사용
- Dispatchers.IO
- IO 작업을 위함
- Dispatchers.Main
- UI 등 메인 스레드 처리
또한 job
을 사용하면 작업이 완료 되기를 대기하거나 취소할 수도 있다2. 물론 여러 개의 job
들의 동기화 처리도 가능하다.
val job = CoroutineScope(Dispatchers.Default).launch {
...
}
job.join()
// job.cancel()
// job.cancelAndJoin()