본문 바로가기
개발 지식/Kotlin

[Coroutine] 코루틴 빌더 간단 정리

by 에르주 2023. 1. 12.
반응형

runBlocking -> 코루틴을 생성하는 코루틴 빌더

runBlocking으로 감싸진 코드는 수행이 끝날 때까지 해당 쓰레드가 Blocking된다. (main쓰레드는 아니다!) 비동기로 동작하는 것이 아니라서 자주 쓰이진 않는다.

꼭 사용해야 하는 경우 라이브러리 또는 프레임워크에서 코루틴을 지원하지 않을 때


launch -> 쓰레드 차단 없이 새 코루틴을 생성하고 결과를 job이라는 객체로 반환, 비동기로 동작한다.

job은 lauch 내 상태를 확인하거나 시작 취소 시킬 수 있다
Ex. job.start(), job.cancel()을 통해 해당 비동기 로직을 제어할 수 있다.

lauch는 동작을 뒤로 미룰 수 있다.
launch(start=CoroutineStart.LAZY) {

-> 실행하는 시점에서 비동기 처리 한다 (즉 job.start() 할 때 실행된다)

 

async -> 비동기 처리에 대한 결과를 가져올 수 있다.

fun sum(a: Int, b: Int) = a+b
val result = async {
sum(1,3)
}

result.await()으로 결과값을 가져올 수 있다. 리턴 타입은 Deferred<T>로 반환된다. 
코루틴은 키워드가 아닌 함수로써 비동기를 제어할 수 있다.


suspend -> 일시 중단 가능한 함수

suspend 함수에서 async, lauch를 사용하기 위해서는 coroutine 빌더를 만들어 줘야 한다.

coroutineScope {

}
runBlocking과 다른 것은 현재 쓰레드가 차단 되지 않고 Blocking이 되지 않고 동작한다.



flow -> 코루틴에서 리엑티브 프로그래밍 스타일로 작성할 수 있도록 만들어지 API

suspend 함수는 reactive mono처럼 단일값을 반환하지만 flow를 사용하게 되면 여러개의 반환값을 사용할 수 있게 해준다.

반응형

댓글