Search

Exceptions

Exception

모든 예외 클래스는 Throwable 클래스를 상속한다.
모든 예외에는 message, stacktrace, cause을 가진다.
throw Exception("Hi There!")
Kotlin
복사

try-catch-finally

예외를 catch하기 위해서 try…catch 를 사용한다.
여러 개의 블록을 가질 수 있고 catch 혹은 finally 블록 둘 중 하나는 필수이며 finally 블록은 생략할 수 있다.
try { // some code } catch (e: SomeException) { // handler } finally { // optional finally block }
Kotlin
복사
try 블록은 표현식이므로 값을 가질 수 있다.
catch 블록은 try 블록의 표현식이 반환하는 값에 영향을 줄 수 있지만 finally 블록은 영향을 줄 수 없다.
val a: Int? = try { input.toInt() } catch (e: NumberFormatException) { null }
Kotlin
복사

Checked exceptions

Kotlin은 checked exceptions이 없다.
코드의 간결성, 유지보수성 그리고 Java와의 호환성을 유지하려는 설계 철학 때문이다.
발생할 수 있는 예외를 호출자에게 경고하려면 @Throws를 사용한다.

Nothing Type

값이 존재하지 않는 타입을 의미한다.
항상 예외를 던지는 함수나 해당 코드 블록이 절대 실행되지 않는다는 것을 표시할 때 사용한다.
//항상 예외를 던지는 함수 fun fail(message: String): Nothing { throw IllegalArgumentException(message) } //throw 이후 코드는 절대 실행되지 않는다는 표시 val s = person.name ?: throw IllegalArgumentException("Name required")
Kotlin
복사
Nothing 과 Nothing? 을 통해 null 값에 대한 타입 추론에도 사용한다.
val x = null // x는 타입이 `Nothing?` val l = listOf(null) // l은 타입이 `List<Nothing?>`
Kotlin
복사