BackEnd/coroutine
-
CoroutineContextBackEnd/coroutine 2025. 6. 15. 07:00
CoroutineContext 구성요소CoroutineName: 코루틴의 이름 설정에 사용되는 객체입니다.CoroutineDispatcher: 코루틴을 스레드에 보내서 실행하는 객체입니다.Job: 코루틴을 조작하는데 사용되는 객체입니다.CoroutineExceptionHandler: 코루틴에서 발생된 예외를 처리하는 객체입니다. CoroutineContext 구성요소를 관리하는 방법CoroutineContext 객체는 구성요소에 대한 키-값 쌍으로 구성요소를 관리합니다.각 구성요소는 고유한 키를 가지며, 키에 대해 중복된 값은 허용되지 않습니다.CoroutineContext 객체에 구성 요소를 추가하기 위해서는 더하기 연산자(+)를 사용하면 됩니다. CoroutineContext 객체는 키에 값을 직접 ..
-
withContextBackEnd/coroutine 2025. 6. 14. 11:00
withContext 함수withContext 함수는 인자로 받은 CoroutineDispatcher를 사용해 코루틴의 실행 스레드를 전환하고, 람다식의 코드를 실행한 후 결과값을 반환하는 함수입니다. 람다식을 실행한 후에는 스레드가 다시 이전의 Dispatcher을 사용하도록 전환됩니다.withContext를 사용하면 코루틴이 생성되지 않습니다.import kotlinx.coroutines.*fun main() = runBlocking { val result: String = withContext(Dispatchers.IO) { delay(1000L) // 네트워크 요청 println("[${Thread.currentThread().name}] 결과값이 반환됩니다") ..
-
async-awaitBackEnd/coroutine 2025. 6. 8. 05:00
async와 Deferredasync 코루틴 빌더를 호출하면 코루틴이 생성되고, Deferred 타입 객체가 반환됩니다.Deferred는 Job과 같이 코루틴을 추상화한 객체이지만, 코루틴으로부터 생성된 결과값을 감싸는 기능을 추가로 가집니다.결과값의 타입은 제네릭 타입인 T로 표현됩니다.public fun CoroutineScope.async( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> T): Deferred async vs launchasync 함수도 launch 함수와 마찬가지로cont..
-
Coroutine 상태BackEnd/coroutine 2025. 6. 7. 23:00
Coroutine 상태 코루틴의 상태를 출력하기 위해서는 Job 객체를 프린트하면 됩니다. 생성 생성 상태의 코루틴을 만들기 위해서는 지연 코루틴을 만들면 됩니다. 다음 코드는 코루틴이 실행 요청되기 전에 출력됐으므로, 생성(New) 상태를 출력합니다.import kotlinx.coroutines.*fun main() = runBlocking { val job: Job = launch(start = CoroutineStart.LAZY) { delay(1000L) } println(job)} 실행 중 다음 코드는 코루틴을 실행하자마자 출력했으므로 실행중(Active) 상태를 출력합니다.import kotlinx.coroutines.*fun main() = runBlocking { val..
-
Coroutine 취소BackEnd/coroutine 2025. 6. 1. 05:00
Coroutine 취소 코루틴 실행 도중, 더이상 코루틴을 실행할 필요가 없어지면 즉시 취소해야 합니다. 취소하지 않으면 코루틴이 스레드를 계속해서 사용하기 때문에 애플리케이션의 성능 저하로 이어집니다.예) 사용자가 오래 걸리는 이미지 변환 작업을 요청한 후 취소한 경우 다음은 2500밀리초 이후 longJob 코루틴을 취소하는 코드입니다.import kotlinx.coroutines.*fun main() = runBlocking { val startTime = System.currentTimeMillis() val longJob: Job = launch(Dispatchers.Default) { repeat(10) { repeatTime -> delay(1..
-
지연 CoroutineBackEnd/coroutine 2025. 5. 31. 03:00
지연 Coroutine지연 코루틴이란 즉시 실행 요청되지 않는 코루틴입니다.launch 함수의 start 인자로 CoroutineStart.LAZY를 넘기면 지연 코루틴이 생성됩니다.지연 코루틴은 start 함수나 join 함수를 호출하면 실행됩니다.즉시 실행만 원하면 start 함수를, 실행과 동시에 끝날 때까지 기다리려면 join 함수를 호출하면 됩니다.import kotlinx.coroutines.*fun main() = runBlocking { val startTime = System.currentTimeMillis() val lazyJob: Job = launch(start = CoroutineStart.LAZY) { println("[${getElapsedTime(startTime)}..
-
Coroutine 순차 처리BackEnd/coroutine 2025. 5. 9. 23:50
'토큰 업데이트 후 네트워크 요청', '이미지 변환 후 업로드 요청' 같이 작업 간에 선후 관계(종속성) 있는 작업들이 존재합니다. 다음은 순차처리 되지 않는 코드입니다. 토큰이 업데이트 되고 네트워크 요청을 해야하나, 병렬로 처리되어 토큰 업데이트 완료 전 네트워크 요청이 일어납니다.import kotlinx.coroutines.*fun main() = runBlocking { val updateTokenJob = launch(Dispatchers.IO) { println("[${Thread.currentThread().name}] 토큰 업데이트 시작") delay(100L) // 새로운 토큰을 가져오는데 걸리는 시간 println("[${Thread.cu..
-
CoroutineDispatcherBackEnd/coroutine 2025. 5. 6. 08:30
CoroutineDispatcher코루틴을 스레드로 보내 실행시키는 객체 CoroutineDispatcher는 코틀린 코루틴의 핵심 구성요소 중 하나로, 코루틴이 어떤 스레드나 스레드 풀에서 실행될지를 결정하는 역할을 합니다. 즉, "코루틴을 어디에서, 어떻게 실행할 것인가"를 제어하는 실행 컨텍스트의 일부입니다.SingleThreadDispatcher SingleThreadDispatcher는 오직 하나의 스레드에서만 코루틴을 실행하도록 보장하는 디스패처(Dispatcher)입니다.import kotlinx.coroutines.*val singleThreadDispatcher: CoroutineDispatcher = newSingleThreadContext("SingleThread")fun m..