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
복사