[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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바