0과 1을 공부하다.

[Kotlin] 코틀린 코루틴 본문

Study/Kotlin

[Kotlin] 코틀린 코루틴

Developer_Jay 2024. 7. 2. 23:14
728x90

 

[Kotlin] 코틀린 특징 및 개발환경 구성 에서 코틀린의 장점으로 코루틴(Coroutines)을 통해 비동기 프로그래밍을 간단하고 효율적으로 할 수 있도록 해주는 장점이 있다고 소개하였다. 본 게시글에서는 코틀린 언어에서의 코루틴에 대해 설명하고 코루틴의 사용법에 대해 기술한다.

 

코루틴이란 ?

 

코루틴(Coroutines)은 코틀린에서 비동기 프로그래밍을 쉽게 처리할 수 있도록 도와주는 경량 스레드이다. 코루틴을 사용하면 비동기 코드와 동기 코드의 차이를 최소화하면서도, 비동기 작업을 더 간단하고 읽기 쉽게 작성할 수 있다.

코루틴의 특징은 아래와 같다.

  • 경량성: 코루틴은 매우 경량이며, 수천 개의 코루틴을 생성해도 성능에 큰 영향을 미치지 않는다. 이는 실제 스레드보다 적은 리소스를 사용하기 때문이다.
  • 비동기 프로그래밍: 코루틴은 비동기 작업을 직관적으로 작성할 수 있도록 도와준다. 콜백 지옥(callback hell)을 피할 수 있으며, 코루틴을 통해 코드를 더 간결하고 유지보수하기 쉽게 만들 수 있다.
  • 구조적 동시성: 코루틴은 코루틴 빌더와 스코프를 사용하여 구조적으로 동시성을 관리한다. 이를 통해 코루틴이 제대로 시작되고 완료되며, 예외가 처리되는지 쉽게 알 수 있다.

 

코루틴의 주요 요소

 

  1. 코루틴 빌더: 코루틴을 시작하는 데 사용한다. 주요 코루틴 빌더에는 launchasync가 있다.
    • launch: 결과를 반환하지 않는 코루틴을 시작한다.
    • async: 결과를 반환하는 코루틴을 시작한다. Deferred 객체를 반환하며, await를 호출하여 결과를 얻을 수 있다.
  2. 코루틴 스코프: 코루틴의 생명주기를 관리한다. 코루틴 스코프 내에서 시작된 코루틴은 스코프가 종료될 때 모두 취소된다.
    • GlobalScope: 애플리케이션 전체에서 동작하는 코루틴을 시작한다. 주로 사용하지 않는 것이 좋다.
    • CoroutineScope: 필요에 따라 스코프를 정의하여 사용할 수 있다.
  3. suspend 함수: 코루틴 내에서 일시 중단 및 재개할 수 있는 함수이다. suspend 키워드를 사용하여 정의된다.

 

코루틴 예제

 

  • 기본 코루틴
import kotlinx.coroutines.*

fun main() {
    // GlobalScope를 사용하여 코루틴 시작
    GlobalScope.launch {
        delay(1000L)
        println("World!")
    }
    println("Hello,")
    Thread.sleep(2000L)  // main 스레드가 종료되지 않도록 잠시 대기
}

 

  • 코루틴 스코프와 빌더
import kotlinx.coroutines.*

fun main() = runBlocking {
    // runBlocking은 코루틴 스코프를 생성하고 완료될 때까지 현재 스레드를 차단
    launch {
        delay(1000L)
        println("World!")
    }
    println("Hello,")
}

 

  • suspend 함수
import kotlinx.coroutines.*

suspend fun doSomething() {
    delay(1000L)
    println("Done!")
}

fun main() = runBlocking {
    doSomething()
    println("Completed")
}

 

  • async와 await
import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferred1 = async {
        delay(1000L)
        "Hello"
    }
    val deferred2 = async {
        delay(2000L)
        "World"
    }

    println("${deferred1.await()} ${deferred2.await()}")
}

 

 

 

 

 

 

※ 본 게시글의 정보가 잘못 되었거나 부족한 부분에 대한 피드백을 환영합니다.

 

 

* CopyRight 2024. Jay Park All rights reserved.

728x90

'Study > Kotlin' 카테고리의 다른 글

[Kotlin] 코틀린 참고하기  (0) 2024.07.02
[Kotlin] 코틀린 클래스  (0) 2024.07.02
[Kotlin] 코틀린 함수  (0) 2024.07.02
[Kotlin] 코틀린 조건문 / 반복문  (0) 2024.07.02
[Kotlin] 코틀린 리스트/배열  (0) 2024.07.02
Comments