코틀린에서 코루틴, 비동기 작업, 스레드, 스레드 풀, 동기화를 진행하기 위해 필요한 개념과 라이브러리를 정리해보겠다. 코틀린은 자바와 호환되기 때문에 자바에서의 경험이 코틀린에서도 유용할 것이다.
kotlinx.coroutines 라이브러리를 추가해야 한다.build.gradle 파일에 아래 의존성을 추가하여 kotlinx.coroutines 라이브러리를 사용할 수 있다.
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0"
코루틴은 경량 스레드로, 비동기 작업을 효율적으로 처리할 수 있도록 도와준다. 코루틴은 비동기 작업을 직관적이고 간단하게 작성할 수 있게 해준다.
GlobalScope나 특정 CoroutineScope를 사용한다.launch: 새로운 코루틴을 시작하고, Job을 반환한다.async: 새로운 코루틴을 시작하고, Deferred를 반환한다. await를 통해 결과를 얻을 수 있다.suspend 키워드를 사용하여 중단 가능한 함수를 정의할 수 있다. 이 함수는 다른 코루틴이나 suspend 함수 내에서 호출될 수 있다.import kotlinx.coroutines.*
fun main() {
// GlobalScope를 사용하여 코루틴 시작
GlobalScope.launch {
delay(1000L) // 1초 지연
println("World!")
}
println("Hello,")
Thread.sleep(2000L) // 메인 스레드를 2초 동안 지연시켜 코루틴이 실행될 시간을 확보
}
launch 함수가 반환하는 것이 Job이다.async 함수가 반환하는 것이 Deferred이다. await를 통해 결과를 얻을 수 있다.delay, withContext 등이 대표적인 suspend 함수이다.코틀린에서도 자바와 동일하게 Thread 클래스를 사용할 수 있다.
예제:
fun main() {
val thread = Thread {
println("Thread is running")
}
thread.start()
}