코루틴이라는 말은 코틀린 언어에서만 지원하는 기술이라고 생각할 수 있지만, 다양한 프로그래밍 언어에서 지원하는 기능이다.
코루틴은 함께를 뜻하는 Co와 routine이 합쳐진 단어로 함께 동작하는 규칙이 있는 일의 순서를 뜻한다.
Android Developers에선 코루틴을 '비동기적으로 실행되는 코드를 간소화하기 위해 사용할 수 있는 동시 실행 설계 패턴' 이라고 설명한다.
우리가 흔히 알고있는 루틴에 대해 코틀린 코드로 알아보자.
이 코드의 실행은 아주 직관적이다.코드 실행 결과를 통해 실행 루틴을 알 수 있다.
이를 그림으로 정리하면 다음과 같다.
메모리 관점에서 생각하면 새로운 루틴이 호출되면 newRoutine()이 사용하는 스택에 지역 변수가 초기화 되고 루틴이 끝나면 해당 메모리에 접근이 불가능하다.먼저 코틀린에서 코루틴을 사용하기 위해 의존성을 추가해야 한다.
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.2'
}
이제 코드를 살펴보자
fun main(): Unit = runBlocking {
println("START")
launch {
newRoutine()
}
yield()
println("END")
}
suspend fun newRoutine() {
val num1 = 1
val num2 = 2
yield()
println("${num1 + num2}")
}
runBlocking은 루틴과 코루틴 세계를 연결하는 역할을 하며 main을 새로운 코루틴으로 만든다.
launch는 비동기적으로 실행되는 새로운 코루틴을 만든다.
yield()는 현재 코루틴을 중단하고 스레드를 다른 코루틴에게 양보한다.
왜 실행 결과가 이렇게 나오는지 코드를 살펴보자! 일반적인 루틴과 코루틴의 특징을 정리하면 다음과 같다.
이번 포스트에선 코루틴의 아주 기초적인 부분에 대해 알아보았다.
다음 포스트에선 프로세스와 스레드, 코루틴에 대해 자세히 알아보자.