📌 Kotlin Coroutines의 CopyableThrowable 이해하기
1. 개요
CopyableThrowable는 스택 트레이스 복구 시 클래스별 방식으로 복제될 수 있는 Throwable을 나타내는 인터페이스입니다. 스택 트레이스 복구에 대한 추가 정보는 STACKTRACE_RECOVERY_PROPERTY_NAME를 참고하세요.
2. 함수 시그니처
@ExperimentalCoroutinesApi
interface CopyableThrowable {
fun createCopy(): T?
}
3. 사용 예시
CopyableThrowable를 구현하여 스택 트레이스 복구 시 예외를 복제하는 방법의 예시입니다:
import kotlinx.coroutines.*
import kotlin.coroutines.*
class BadResponseCodeException(val responseCode: Int) : Exception(), CopyableThrowable {
override fun createCopy(): BadResponseCodeException? {
val result = BadResponseCodeException(responseCode)
result.initCause(this)
return result
}
}
fun main() = runBlocking {
val job = launch {
throw BadResponseCodeException(404)
}
job.join()
}
위 예시에서, BadResponseCodeException 클래스는 CopyableThrowable을 구현하여 스택 트레이스 복구 시 예외를 복제할 수 있습니다. createCopy 함수는 현재 인스턴스의 복사본을 생성하며, 디버깅을 용이하게 하기 위해 원본 예외를 원인(cause)으로 설정합니다.
4. 주의사항
- 복제 메커니즘은 JVM에서만 사용되지만, 공통 예외에서 이를 구현하면 JVM에서 스택 트레이스가 적절히 복구될 수 있습니다.
createCopy함수는 현재 인스턴스의 복사본을 생성합니다. 디버깅을 용이하게 하기 위해, 결과 예외의 원인(cause)으로 원본 예외를 사용하는 것이 좋습니다. 복제된 예외의 스택 트레이스는 스택 트레이스 복구 메커니즘에 의해Throwable.setStackTrace호출로 덮어쓰여집니다. 예외는 이 함수에서null을 반환하여 복제를 옵트아웃할 수 있습니다. 원본 예외의 억제된 예외는 복제하지 않아야 순환 예외를 피할 수 있습니다.
📌 원본 출처
본 문서의 내용은 Kotlin 공식 문서를 참고하여 작성되었습니다. 자세한 내용은 아래 공식 문서를 통해 확인할 수 있습니다.
'Kotlin > kotlinx.coroutines' 카테고리의 다른 글
| CoroutineDispatcher (0) | 2025.02.07 |
|---|---|
| CopyableThreadContextElement (0) | 2025.02.07 |
| CompletionHandler (0) | 2025.02.07 |
| completeWith (0) | 2025.02.07 |
| CompletableJob (0) | 2025.02.07 |