PHpullh
학습 라이브러리/Kotlin/함수형 에러 처리

KOTLIN · 함수형

함수형 에러 처리

Kotlin의 Result 타입과 runCatching을 활용한 함수형 에러 처리 전략입니다.

함수형고급resultrunCatchingfunctional-errorrecover

핵심 설명

Kotlin의 Result 타입과 runCatching을 활용한 함수형 에러 처리 전략입니다.

Kotlin code

fun fetchData(url: String): Result<String> = runCatching {
    if (url.isEmpty()) throw IllegalArgumentException("빈 URL")
    if (!url.startsWith("http")) throw IllegalArgumentException("잘못된 프로토콜")
    "데이터: $url 응답"
}

fun parseJson(data: String): Result<Map<String, Any>> = runCatching {
    mapOf("content" to data, "status" to "ok")
}

fun main() {
    // Result 체이닝
    val result = fetchData("https://api.example.com")
        .mapCatching { parseJson(it).getOrThrow() }
        .map { it["content"] }
        .getOrElse { "기본값" }
    println(result)

    // recover 패턴
    val recovered = fetchData("")
        .recover { ex ->
            println("복구: ${ex.message}")
            "빈 응답"
        }
    println(recovered.getOrNull())

    // fold로 처리
    fetchData("ftp://wrong").fold(
        onSuccess = { println("성공: $it") },
        onFailure = { println("실패: ${it.message}") }
    )
}

학습 팁

mapCatching은 변환 중 발생하는 예외도 Result.failure로 감싸줍니다. map은 예외가 전파됩니다.

주의할 점

Result를 함수 반환 타입으로 직접 사용하는 것은 현재 제한됩니다. 래퍼 클래스를 사용하거나 runCatching 호출부에서 처리하세요.

자주 묻는 질문

함수형 에러 처리란 무엇인가요?

Kotlin의 Result 타입과 runCatching 을 활용한 함수형 에러 처리 전략입니다.

함수형 에러 처리 학습 시 주의할 점은 무엇인가요?

Result 를 함수 반환 타입으로 직접 사용하는 것은 현재 제한됩니다. 래퍼 클래스를 사용하거나 runCatching 호출부에서 처리하세요.