PHpullh
학습 라이브러리/Kotlin/runCatching 활용

KOTLIN · 예외처리

runCatching 활용

runCatching으로 예외를 Result로 래핑하여 함수형으로 처리합니다. 체이닝과 복구 패턴을 다룹니다.

예외처리중급runCatchingresult-chainrecovermapCatching

핵심 설명

runCatching으로 예외를 Result로 래핑하여 함수형으로 처리합니다. 체이닝과 복구 패턴을 다룹니다.

Kotlin code

data class User(val name: String, val email: String)

fun parseUser(json: String): User {
    val parts = json.split(",")
    require(parts.size == 2) { "잘못된 형식" }
    return User(parts[0].trim(), parts[1].trim())
}

fun validateEmail(user: User): User {
    require(user.email.contains("@")) { "유효하지 않은 이메일" }
    return user
}

fun main() {
    val inputs = listOf("김철수, kim@test.com", "이영희", "박지성, invalid")

    inputs.forEach { input ->
        val result = runCatching { parseUser(input) }
            .mapCatching { validateEmail(it) }
            .map { "✓ ${it.name} (${it.email})" }
            .recover { "✗ 오류: ${it.message}" }

        println(result.getOrNull())
    }

    // onSuccess/onFailure 패턴
    runCatching { parseUser("홍길동, hong@test.com") }
        .onSuccess { println("파싱 성공: $it") }
        .onFailure { println("파싱 실패: ${it.message}") }
        .mapCatching { validateEmail(it) }
        .onSuccess { println("검증 성공: $it") }
        .onFailure { println("검증 실패: ${it.message}") }
}

학습 팁

onSuccess/onFailure는 부수 효과(로깅 등)를 위한 것이며, Result를 변경하지 않고 그대로 반환합니다.

주의할 점

recover 블록에서 다시 예외를 던지면 Result.failure가 됩니다. 복구 로직에서는 안전한 기본값을 반환하세요.

자주 묻는 질문

runCatching 활용란 무엇인가요?

runCatching 으로 예외를 Result 로 래핑하여 함수형으로 처리합니다. 체이닝과 복구 패턴을 다룹니다.

runCatching 활용 학습 시 주의할 점은 무엇인가요?

recover 블록에서 다시 예외를 던지면 Result.failure 가 됩니다. 복구 로직에서는 안전한 기본값을 반환하세요.