Sam Story

코루틴 (Coroutine) 본문

Kotlin

코루틴 (Coroutine)

Sam H 2025. 2. 5. 17:48

오늘은 코루틴에 대해서 간단히 포스팅 해보려 한다.

 

코루틴(Coroutine) 이란?

코루틴(Coroutine)은 Kotlin에서 비동기 프로그래밍을 간결하고 효율적으로 처리할 수 있도록 돕는 기능이다.

코루틴은 스레드를 사용하지 않고도 비동기 작업을 동기적인 코드처럼 작성할 수 있게 해 주어,

코드의 가독성과 성능을 향상시킨다.

 

코루틴(Coroutine)의 특징

비동기 작업: 네트워크 요청, 파일 읽기/쓰기 같은 시간이 오래 걸리는 작업을 비동기로 처리할 수 있다.

 

스레드 자 절감: 스레드와는 달리 코루틴은 메모리와 CPU 자원을 적게 사용한다.

 

간결한 코드: 동기적인 코드처럼 비동기 작업을 작성할 수 있어 코드가 훨씬 깔끔하고 읽기 쉬워진다.

 

 

왜 코루틴(Coroutine)을 사용하는가?

코루틴이 갖는 장점들은 위내용에서 말한 장점들로도 충분히 비동기 작업을 함에 있어서

유용하게 사용할 수 있다.

 

그렇다면 "스레드보다 코루틴을 사용하는게 무조건 좋은거 아니야?"

라고 한다면 코루틴은 매우 효율적이고 유용하지만

무조건 스레드를 대체하는 것이 항상 최선인 것은 아니다.

 

개발 공부를 하면서 항상 느끼는것은 무조건 이라는것은 없다는거다.

스레드와 코루틴 용도에 맞게 사용하는게 중요하다.

 

그렇다면 어떤 경우에 코루틴을 사용하는지,스레드는 언제쓰는지

간단히 알아보면

 

코루틴이 더 적합한 경우:

  • I/O 작업이 많은 경우 (예: 파일 읽기/쓰기, 네트워크 통신)
  • 대기 시간이 긴 작업을 처리할 때
  • 코드 가독성과 관리가 중요한 경우

스레드가 더 적합한 경우:

  • CPU 집약적인 작업을 병렬로 처리해야 할 때
  • 직접적인 스레드 제어가 필요한 경우 (예: 높은 성능이 요구되는 작업에서 더 세밀한 스레드 관리가 필요할 때)

오늘의 주제가 코루틴인 만큼 코루틴의 장점에 대해서 좀 더 말해보자면

 

A 스레드와 B 스레드 동시에 실행되는 메인 스레드가 있다고 가정해보자.

이 메인 스레드에서 A 스레드와 B 스레드를 동시에 실행하게 되면

CPU가 매번 쓰레드를 점유했다가 놓아주고,

새로운 쓰레드를 점유했다가 놓아주고를 반복해야 한다. 이를 컨텍스트 스위칭이라고 한다. 

 

 

 

 

이러한 컨텍스트 스위칭이 자주 발생하게 되면 성능저하로 이어지게 되는데

하나의 쓰레드에서 단순히 함수를 왔다 갔다 하는것과는 다르게 꽤 비용이 드는 작업이기 때문에

코루틴을 사용하게 되면 이러한 동시성 작업도 어느정도 해소할 수 있게 된다.

 

 

예제

간단한 예제를 통해서 코루틴을 어떻게 사용하는지에 대해서 알아보자.

 

Main

fun main() = runBlocking {// main 스레드에서 코루틴 실행
    println("메인 시작")

    launch { // 새로운 코루틴을 시작하는 함수
    // delay는 스레드를 차단하지 않고, 
    //코루틴만 일시 중단하므로 메인 스레드가 자유롭게 다른 작업을 할 수 있게 된다.
        delay(1000) 
        println("코루틴 실행 끝")
    }

    println("메인 끝")
}

 

 

 

실행결과

실행 직후

 

실행 후 1초 지났을 때

 

이 코드는 메인 스레드에서 코루틴을 실행하고,

코루틴이 실행되는 동안 메인 스레드는 다른 작업을 계속 수행할 수 있다는걸 알 수 있다.

 

이렇게 코루틴을 사용하면 비동기적인 작업을 간결하게 처리할 수 있다.

'Kotlin' 카테고리의 다른 글

늦은 초기화 lateinit var , by lazy  (0) 2024.11.04
Kotlin 기본 생성자 오버로딩  (1) 2024.04.20
Kotlin 조건문  (0) 2024.02.02
Kotlin 변수와 자료형  (0) 2024.02.01