KOTLIN · 예외처리
runCatching & Result
함수형 스타일의 에러 처리. Result 타입으로 성공/실패를 명시적으로 표현합니다.
예외처리중급runCatchingResultfoldgetOrDefaultonSuccess
핵심 설명
함수형 스타일의 에러 처리. Result 타입으로 성공/실패를 명시적으로 표현합니다.
Kotlin code
// runCatching — try-catch를 Result로 감쌈
fun divide(a: Int, b: Int): Result<Int> =
runCatching { a / b }
// fold — 성공/실패 처리
fun main() {
divide(10, 2)
.fold(
onSuccess = { println("결과: $it") },
onFailure = { println("에러: ${it.message}") }
)
divide(10, 0)
.fold(
onSuccess = { println("결과: $it") },
onFailure = { println("에러: ${it.message}") }
)
// map / mapCatching — 체이닝
val result = runCatching { "42".toInt() }
.map { it * 2 }
.getOrDefault(0)
println(result) // 84
// getOrElse
val value = runCatching { "abc".toInt() }
.getOrElse { -1 }
println(value) // -1
// 여러 연산 체이닝
runCatching { fetchData() }
.mapCatching { parseData(it) }
.onSuccess { println("완료: $it") }
.onFailure { println("실패: ${it.message}") }
}
fun fetchData() = "raw-data"
fun parseData(s: String) = s.uppercase()학습 팁
runCatching은 Error 타입 예외(OutOfMemoryError 등)도 잡습니다. 치명적 에러를 무시하지 않도록 isFailure 체크 시 예외 타입을 확인하세요.
주의할 점
Android에서 Result를 ViewModel의 LiveData나 StateFlow에 담으면 제네릭 중첩 문제가 생길 수 있습니다. 별도 sealed class를 사용하는 것이 더 명확합니다.
자주 묻는 질문
runCatching & Result란 무엇인가요?
함수형 스타일의 에러 처리. Result 타입으로 성공/실패를 명시적으로 표현합니다.
runCatching & Result 학습 시 주의할 점은 무엇인가요?
Android에서 Result 를 ViewModel의 LiveData 나 StateFlow 에 담으면 제네릭 중첩 문제가 생길 수 있습니다. 별도 sealed class를 사용하는 것이 더 명확합니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.