본문으로 바로가기
반응형

이 글은 Kotlin In Action을 참고 하였습니다.

더욱 자세한 설명이나 예제는 직접 책을 구매하여 확인 하시기 바랍니다

2.5 Kotlin의 예외처리

기본적으로 코틀린의 예외처리는 java와 같습니다.

fun readNumber(reader: BufferedReader): Int? {
    try {
        val line = reader.readLine()
        return Integer.parseInt(line)
    }
    catch (e: NumberFormatException) {
        return null
    }
    finally {
        reader.close()
    }
}

fun main(args: Array) {
    val reader = BufferedReader(StringReader("239"))
    println(readNumber(reader))
}

try-catch-finally를 사용하여 표현하는것은 자바와 같습니다.

단 코틀린의 checked exception의 처리를 강요하지 않습니다.

위 예제는 IOException을 반드시 처리해야 합니다. (checked exception이므로)

따라서 catch 문에 추가하거나, 함수에 throws IOException을 표기해 줘야 하지만 코틀린은 하지 않아도 컴파일에 문제가 없습니다.


이는 Java의 대체적인 코드 사용 패턴을 볼때 checked exception을 강제한다고 해서 모두 예외처리를 하기보단 보통 // 으로 무시하거나, 추가적으로 처리하지 않기 때문입니다.


따라서 실용성을 강조하는 코틀린은 이런것들을 과감하게 생략합니다.

추가적으로 try-catch문의 expression이기 때문에 블록의 마지막 문장이 반환값이 됩니다.


fun readNumber(reader: BufferedReader) {
    val number = try {
        Integer.parseInt(reader.readLine())
    } catch (e: NumberFormatException) {
        null
    }

    println(number)
}

위 예제의 경우 정상처리된다면 파싱된 숫자가, exception이 발생 할 경우 null이 반환됩니다.


추가적으로 Java7 부터 try-with-resource를 사용할 수 있습니다.

이렇게 자원 해제가 필요한 (Closable을 상속하여 사용하는) object들은 kotlin에서 use 라는 키워드를 사용하여 처리합니다.

요건 나중에 알아보겠습니다~


반응형