Kotlin

코루틴

Hcode 2023. 2. 16.

 

코루틴의 동작 원리에 대해서는 우선 패스합니다.

참고로 코루틴은 코틀린에 종속적인 문법이 아닙니다.


 

코루틴이란?

 

코루틴은 비동기적인 프로그래밍을 지원하는 기능입니다.

가벼우면서도 효율적인 쓰레드 처리 방식을 제공합니다.

 

코루틴은 일종의 가상 쓰레드로,
  코드 블록의 실행을 일시 중지하거나 재개할 수 있는 방법을 제공합니다.

이를 통해 코드 실행 흐름을 제어하며,

  더욱 효율적으로 비동기 처리를 수행할 수 있습니다.

 

Kotlin에서 코루틴을 사용하려면,
  코루틴을 시작하고 관리하는 Coroutine builder 함수를 사용합니다.

 

Couroutine builder 함수의 예를 들면,

  • launch 함수 : 백그라운드에서 코루틴을 시작합니다.
  • async 함수 : 결과 값을 반환하는 코루틴을 시작합니다.

 

특징적인 함수로는 suspend가 있습니다.

suspend 함수는 일시 중지 가능한 함수로,
  일반적인 함수와 달리 중간에 일시 중지하고 다시 시작할 수 있습니다.

코루틴이 일시 중지될 때도 해당 코루틴을 실행 중인 스레드를 차단하지 않기 때문에,
  효율적인 비동기 처리가 가능해집니다.

 

또한 구조적 동시성을 제공하여,
  여러 개의 코루틴을 쉽게 관리하고 오류 처리를 보다 간편하게 할 수 있습니다.

 


 

코루틴을 사용하는 이유

코루틴을 사용하는 가장 중요한 이유는
  비동기 프로그래밍을 처리할 수 있는 가볍고 효율적인 방법을 제공하기 때문입니다.

 

코루틴을 사용하면,
  메인 스레드를 차단하지 않고 동시에 여러 작업을 쉽게 수행할 수 있으므로
    더 빠르고 응답성이 뛰어난 애플리케이션을 개발할 수 있습니다.

 

또한 코루틴은 이해하기 쉽고 구문이 일반 함수와 유사합니다.

 

코드의 가독성과 유지 관리성을 개선하고
  동시성과 병렬성을 지원하여
    사용 가능한 시스템 리소스를 최대한 활용하고 애플리케이션의 전반적인 성능을 향상할 수 있습니다.

 


 

주요 이점

효율적인 비동기 처리

코루틴을 사용하는 주된 이유 중 하나는
  비동기 프로그래밍을 효율적으로 처리하기 위해서입니다.

코루틴은 동시성 및 비차단 작업을 처리하는 가볍고 효율적인 방법을 제공하여
  효율적이고 확장 가능한 코드를 더 쉽게 작성할 수 있도록 합니다.

코루틴을 사용하면
  메인 스레드를 차단하지 않고 동시에 여러 작업을 쉽게 수행할 수 있으므로,
    더 빠르고 응답성이 뛰어난 애플리케이션을 만들 수 있습니다.

 

가독성 및 유지 관리성 향상

코루틴은 코드의 가독성과 유지 관리성을 향상시킬 수 있습니다.

코루틴을 사용하면
  자연스럽고 간결한 방식으로 순차적 코드를 작성할 수 있으므로
    이해하고 유지하기가 더 쉽습니다.

또한 코루틴은
  오류 및 예외를 처리하는 구조화된 방법을 제공하므로
    오류 처리가 간소화됩니다.

 

동시성과 병렬성

코루틴은 동시성 및 병렬성을 지원하므로
  여러 작업을 동시에 또는 병렬로 수행할 수 있습니다.

이를 통해 사용 가능한 시스템 리소스를 최대한 활용하여
  애플리케이션을 더 빠르고 효율적으로 만들 수 있습니다.

 

사용의 용이성

코루틴은 사용하기 쉽고 이해하기 쉬우며 구문은 일반 함수와 유사합니다.

if문 및 for 루프와 같은 친숙한 구성을 사용하여
  코루틴을 작성할 수 있고
    더 쉽게 배우고 사용할 수 있습니다.

 

효과적인 자원 관리

코루틴은 가볍고 효율적으로 설계되었으므로
  시스템 리소스를 보다 효과적으로 관리하는 데 사용할 수 있습니다.

코루틴을 사용하면
  코드를 실행하는 데 필요한 스레드 수를 최소화하여
    애플리케이션의 전체 메모리 및 CPU 사용량을 줄일 수 있습니다.

 


 

예제

  • HTTP requests
  • Database access
  • 파일 작업
  • Websocket 연결
  • 비동기 처리

 


 

HTTP requests

suspend fun makeRequest(): HttpResponse {
    val client = HttpClient()
    return client.get("http://example.com")
}

Kotlin HttpClient 라이브러리는

  외부 서비스에 요청하는 데 사용할 수 있는
    사용하기 쉬운 HTTP 클라이언트입니다.

일시 중단 기능을 사용하여
  비차단 요청을 할 수 있으므로
    애플리케이션이 응답을 기다리는 동안 다른 작업을 계속 처리할 수 있습니다.

 


 

Database access

suspend fun getProducts(): List<Product> {
    return withContext(Dispatchers.IO) {
        transaction {
            Product.all().toList()
        }
    }
}

Kotlin Exposed 라이브러리는
  데이터베이스에 액세스 하는 데 사용할 수 있는 경량 ORM입니다.

일시 중지 기능을 사용하여
  비차단 쿼리 및 업데이트를 수행할 수 있으므로
    애플리케이션이 응답을 기다리는 동안 다른 작업을 계속 처리할 수 있습니다.

 


 

파일 작업

suspend fun readFile(file: File): String {
    return withContext(Dispatchers.IO) {
        file.readText()
    }
}

Kotlin java.nio 패키지는
  파일 작업을 수행하기 위한 강력한 도구 모음을 제공합니다.

정지 기능을 사용하여
  비차단 방식으로 파일을 읽고 쓸 수 있습니다.

 


 

Websocket 연결

suspend fun connectToWebSocket(url: String) {
    val client = HttpClient {
        install(WebSockets)
    }

    client.webSocket(url) {
        send("Hello, World!")
        val message = incoming.receive() as? Frame.Text
        println("Received message: ${message?.readText()}")
    }
}

Kotlin kotlinx.coroutines 라이브러리는
  websocket
연결을 설정하고 유지하는 간단한 방법을 제공합니다.

일시 중지 기능을 사용하여
  websocket
연결을 통해 메시지를 보내고 받을 수 있습니다.

 


 

비동기 처리

suspend fun performHeavyOperation() {
    withContext(Dispatchers.Default) {
        // perform heavy operation here
    }
}

Kotlin kotlinx.coroutines 라이브러리는
  비동기 처리를 수행하기 위한 강력한 도구 모음을 제공합니다.

일시 중단 기능을 사용하여
  비차단 방식으로 장기 실행 작업을 수행할 수 있습니다.

 


 

요약

코루틴은
  가벼우면서도 효율적인 쓰레드 처리 방식을 제공하여
    비동기적인 프로그래밍을 보다 쉽게 구현할 수 있습니다.
Coroutine builder 함수와 suspend 함수를 이용하여
  코루틴을 시작하고 일시중지할 수 있으며,
    구조적 동시성을 이용하여 코루틴을 보다 쉽게 관리할 수 있습니다.

 

코루틴은
  백엔드 개발을 위한 광범위한 도구를 제공하며
    HTTP
요청 만들기, 데이터베이스 액세스, 파일 작업 수행, 웹소켓 연결 처리, 비동기 처리 수행과 같은
      다양한 방식으로 정지 기능을 사용할 수 있습니다.

일시 중지 기능을 사용하면
  비차단 작업이 완료될 때까지 기다리는 동안
    다른 작업을 계속 처리할 수 있으므로
      애플리케이션의 성능과 확장성을 높일 수 있습니다.

 


 

'Kotlin' 카테고리의 다른 글

고차 함수(higher-order functions)  (0) 2023.02.17
@EventListener  (0) 2023.02.14

댓글