[Kotlin] 코틀린 코루틴

2024. 7. 2. 23:14·Language/Kotlin
728x90

 

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

 

코루틴이란 ?

 

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

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

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

 

코루틴의 주요 요소

 

  1. 코루틴 빌더: 코루틴을 시작하는 데 사용한다. 주요 코루틴 빌더에는 launch와 async가 있다.
    • 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
저작자표시 비영리 변경금지 (새창열림)

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

[Kotlin] 코틀린 참고하기  (2) 2024.07.02
[Kotlin] 코틀린 클래스  (258) 2024.07.02
[Kotlin] 코틀린 함수  (2) 2024.07.02
[Kotlin] 코틀린 조건문 / 반복문  (2955) 2024.07.02
[Kotlin] 코틀린 리스트/배열  (0) 2024.07.02
'Language/Kotlin' 카테고리의 다른 글
  • [Kotlin] 코틀린 참고하기
  • [Kotlin] 코틀린 클래스
  • [Kotlin] 코틀린 함수
  • [Kotlin] 코틀린 조건문 / 반복문
dev.parkjh
dev.parkjh
Jay Blog. Github: https://github.com/GreatPark96
  • dev.parkjh
    0과 1을 공부하다.
    dev.parkjh
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • Profile (2)
      • Paper (6)
      • Column (3)
      • Project (8)
        • Smart Home (3)
        • 3D Printing (5)
      • Front-End (0)
        • Web (3)
      • Back-End (8)
        • API (1)
        • DB (1)
        • Laravel (4)
      • Language (16)
        • Kotlin (11)
        • C, C++ (3)
        • JAVA (0)
        • python (2)
      • System (28)
        • Server (15)
        • Security (1)
        • Network (1)
        • Linux (8)
        • Cloud (3)
      • ETC (34)
        • Book Recommend (Computer) (3)
        • IoT (7)
        • BlockChain (7)
        • ETC (17)
      • My YOLO (1)
      • Note (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    work hour
    3D프린터 입문
    3D프린터
    ai code review
    github
    3D모델링
    Jenkins
    kubernetes
    코틀린개발환경
    C언어
    NAS HDD교체
    3D
    docker private register
    ci/cd
    nas
    coderabbit
    docker
    네이버클라우드
    git
    Database
    data serialization formats
    데이터 직렬화 포맷
    3d프린터 초보
    리눅스 파일동기화
    Notification
    gitlab
    Kotlin
    linux job
    ncp container registry
    docker container
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dev.parkjh
[Kotlin] 코틀린 코루틴
상단으로

티스토리툴바