Exception 은 runtime 중에 발생한 예외적인 상황(exceptional situations) 에 대한 경고이다.
Java 에서 쓰던 그대로 try/catch 를 쓸 수 있다. 그리고 역시 finally 도 쓸 수 있다.
finally 는 try 가 성공하든 실패하든 무조건 작동하며, try, catch에 return 이 있고, return 이 동작하는 상황에서조차도 finally 는 작동한다. return 이 되기 전에 fianlly block 을 실행하고 그 뒤에 return 을 시행한다.
원하는 예외를 발생시킬 수 있다.
fun setNumber(num: Int) {
if (num < 100) {
throw IllegalArgumentException("The number should Bigger than 100")
}
// more code
}
try 구문과 throw 구문은 expression 으로 사용할 수 있다.
val result = try { str.toInt() } catch (e : Exception) { null}
val thro = someClass?.property ?: throw SomeException()
throw 를 표현식(expression) 으로 쓸 수 있다는 건 throw 가 type 을 갖고 있다는 뜻이다. throw 는 Nothing 이라는 특이한 type 을 갖고 있는데, 이 type 은 어떤 값도 가질 수 없다. Nothing? 은 null 을 가질 수 있긴 하다.