PHpullh
학습 라이브러리/Kotlin/try-catch-finally & 커스텀 예외

KOTLIN · 예외처리

try-catch-finally & 커스텀 예외

Kotlin의 예외 처리. 모든 예외가 unchecked입니다(checked exception 없음).

예외처리입문try-catchfinallyExceptionthrowchecked-exception

핵심 설명

Kotlin의 예외 처리. 모든 예외가 unchecked입니다(checked exception 없음).

Kotlin code

// 커스텀 예외
class ValidationException(
    message: String,
    val field: String
) : IllegalArgumentException(message)

class NotFoundException(val id: Int)
    : RuntimeException("ID $id를 찾을 수 없습니다")

// try는 표현식 — 값을 반환
fun parseInt(s: String): Int? =
    try { s.toInt() }
    catch (e: NumberFormatException) { null }

fun findUser(id: Int): String {
    if (id <= 0) throw ValidationException("ID는 양수", "id")
    if (id > 100) throw NotFoundException(id)
    return "User#$id"
}

fun main() {
    // try-catch-finally
    try {
        println(findUser(0))
    } catch (e: ValidationException) {
        println("검증 오류 [${e.field}]: ${e.message}")
    } catch (e: NotFoundException) {
        println("없음: ${e.message}")
    } finally {
        println("항상 실행")
    }

    // try 표현식
    val n1 = parseInt("42")    // 42
    val n2 = parseInt("abc")   // null
    println("$n1, $n2")
}

학습 팁

Kotlin에는 checked exception이 없습니다. @Throws(IOException::class) 어노테이션은 Java 상호운용을 위해 선언만 하는 것이며, Kotlin 내부에서는 강제되지 않습니다.

주의할 점

catch (e: Exception)으로 모든 예외를 잡으면 CancellationException도 잡힙니다. 코루틴에서는 CancellationException을 다시 throw해야 코루틴이 정상 취소됩니다.

자주 묻는 질문

try-catch-finally & 커스텀 예외란 무엇인가요?

Kotlin의 예외 처리. 모든 예외가 unchecked 입니다(checked exception 없음).

try-catch-finally & 커스텀 예외 학습 시 주의할 점은 무엇인가요?

catch (e: Exception) 으로 모든 예외를 잡으면 CancellationException 도 잡힙니다. 코루틴에서는 CancellationException 을 다시 throw해야 코루틴이 정상 취소됩니다.