📌 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 |