PHpullh
학습 라이브러리/Kotlin/Result 타입 활용

KOTLIN · 예외처리

Result 타입 활용

Kotlin 표준 Result 타입으로 성공/실패를 명시적으로 표현합니다. 예외 대신 반환값으로 에러를 전달합니다.

예외처리중급resultrunCatchingfolderror-handling

핵심 설명

Kotlin 표준 Result 타입으로 성공/실패를 명시적으로 표현합니다. 예외 대신 반환값으로 에러를 전달합니다.

Kotlin code

fun parseNumber(input: String): Result<Int> =
    runCatching { input.trim().toInt() }

fun divide(a: Int, b: Int): Result<Double> =
    if (b == 0) Result.failure(ArithmeticException("0으로 나눌 수 없음"))
    else Result.success(a.toDouble() / b)

fun main() {
    // 기본 사용
    val result = parseNumber("42")
    println(result.getOrDefault(0))  // 42

    // 체이닝
    val chained = parseNumber("10")
        .mapCatching { divide(100, it).getOrThrow() }
        .map { "결과: %.2f".format(it) }
    println(chained.getOrElse { "오류: ${it.message}" })

    // fold 패턴
    parseNumber("abc").fold(
        onSuccess = { println("성공: $it") },
        onFailure = { println("실패: ${it.message}") }
    )

    // recover: 실패 복구
    val recovered = parseNumber("xyz")
        .recover { 0 }
    println("복구: ${recovered.getOrNull()}")
}

학습 팁

mapCatching은 변환 중 예외를 자동으로 Result.failure로 감싸줍니다. 안전한 체이닝에 유용합니다.

주의할 점

getOrThrow()를 무분별하게 사용하면 Result의 안전성 이점이 사라집니다. foldgetOrElse를 선호하세요.

자주 묻는 질문

Result 타입 활용란 무엇인가요?

Kotlin 표준 Result 타입으로 성공/실패를 명시적으로 표현합니다. 예외 대신 반환값으로 에러를 전달합니다.

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

getOrThrow() 를 무분별하게 사용하면 Result 의 안전성 이점이 사라집니다. fold 나 getOrElse 를 선호하세요.