본문 바로가기

Language/Kotlin

Kotlin Coroutine 소개 및 Hello Coroutine!

코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다. 코루틴은 Kotlin 버전 1.3에 추가되었으며 다른 언어에서 확립된 개념을 기반으로 합니다.

Android에서 코루틴은 기본 스레드를 차단하여 앱이 응답하지 않게 만들 수도 있는 장기 실행 작업을 관리하는 데 도움이 됩니다. 

기능

코루틴은 Android의 비동기 프로그래밍에 권장되는 솔루션입니다. 주목할 만한 기능은 다음과 같습니다.

  • 경량(LightWeight): 코루틴을 실행 중인 스레드를 차단하지(block) 않는 정지(suspension)를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있습니다. 정지(suspension)는 많은 동시 작업(concurrunt operation)을 지원하면서도 차단보다 메모리를 절약합니다.
  • 메모리 누수 감소: 구조화된 동시 실행(structured concurrency)을 사용하여 범위(scope) 내에서 작업을 실행합니다.
  • 기본으로 제공되는 취소 지원: 실행 중인 코루틴 계층 구조를 통해 자동으로 취소가 전달됩니다.
  • Jetpack 통합: 많은 Jetpack 라이브러리에 코루틴을 완전히 지원하는 확장 프로그램이 포함되어 있습니다. 일부 라이브러리는 구조화된 동시 실행에 사용할 수 있는 자체 코루틴 범위도 제공합니다.

Hello Coroutine! 

버튼을 클릭하면 코루틴을 사용해 로그를 남길 것 입니다. 

코루틴 실행시 작업이 이루어질 스레드를 정할 수 있는데 Dispatchers.IO를 사용해서 백그라운드 스레드에서 작업하도록 할 것입니다.

 

의존성 추가를 합니다.

dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0-RC2'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0-RC2'
}

 

 

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btnDownloadUserData.setOnClickListener {
            // 버튼 클릭시 백그라운드 스레드에서 코루틴 실행함
            CoroutineScope(Dispatchers.IO).launch {
                downloadUserData()
            }

        }
    }

    private fun downloadUserData() {
    	// 현재 스레드 이름 로그로 남기도록 함
        Log.i("MyTag", "Hello Coroutine! in ${Thread.currentThread().name}")
    }
}

 

결과는 다음과 같습니다.

버튼 클릭 시 worker 스레드 이름을 가져오는 것을 확인할 수 있습니다.

 

참고 : 

developer.android.com/kotlin/coroutines?hl=en

 

Android의 Kotlin 코루틴  |  Android 개발자  |  Android Developers

코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다. 코루틴은 Kotlin 버전 1.3에 추가되었으며 다른 언어에서 확립된 개념을 기반으로

developer.android.com

 

다음 글

1. Android Kotlin Coroutine 소개 및 Hello Coroutine!