[코틀린기초] 36. 코루틴 개념 및 launch 빌더

코루틴

스레드와 달리 코틀린은 코루틴을 통해 복잡성을 줄이고도 손쉽게 일시 중단하거나 다시 시작하는 루틴을 만들어낼 수 있다.

멀티태스킹을 실현하면서 가벼운 스레드라고도 불림

코루틴은 컨텍스트 스위칭 없이(코루틴은 스택이 없다) 해당 루틴을 일시중단(suspend)을 통해 제어

스레드 하나에 여러 코루틴이 존재할 수 있어서 스레드보다 더 작은 단위이다.

코루틴 빌더

launch

일단 실행하고 잊어버리는 형태의 코루틴으로 메인 프로그램과 독립되어 실행할 수 있다.

기본적으로 즉시 실행하며, 블록내 실행 결과는 반환하지 않는다.

상위 코드를 블록시키지 않고 관리를 위한 Job 객체를 즉시 반환한다.

join을 통해 상위 코드가 종료되지않고 완료를 기다리게 할 수 있다.

async

비동기 호출을 위해 만든 코루틴으로 결과나 예외를 반환한다.

실행 결과는 Deffered를 통해 반환하며 await을 통해 받을 수 있다.

await은 작업이 완료될 때까지 기다리게 된다.

기본적인 빌더의 사용

import kotlinx.coroutines.*
 
fun main(){
	GlobalScope.launch{	// 새로운 코루틴을 백그라운드에 실행
		delay(1000L)	// 논-블록킹
		println("World!") // 지연 후 출력
	}
	println("Hello,")	// main스레드가 코루틴이 지연되는 동안 계속 실행
	Thread.sleep(2000L) // main스레드가 jvm에서 바로 종료되지 않게 기다림 (블록킹)
}

#### suspend 키워드를 사용하면 사용자가 중단 및 재개가 가능한 함수를 만들 수 있다.

suspend fun doSomething(){
	println("hello!")
}

#### 단, suspend 함수는 코루틴 블록 안에서만 사용되어야 한다!

컴파일러는 suspend가 붙은 함수를 자동적으로 추출해 Continuation 클래스로부터 분리된 루틴을 만든다