코틀린의 예외 처리
- 코틀린의 예외처리 구문은 자바의 예외처리 구문과 비슷하다.
if (percentage !in 0..100) {
throw IllegalArgumentException("Exception")
}
다른 클래스와 마찬가지로 예외 인스턴스를 만들 때도 new 를 붙일 필요가 없다.
또한 자바와 달리 코틀린의 throw는 식이므로 다른 식에 포함될 수 있다.
val number = 101
val percentage = if (number in 0..100) number else throw IllegalArgumentException("Exception")

try, catch, finally
자바와 마찬가지로 예외를 처리하려면 try, catch, finally 절을 함께 사용한다.
아래의 예시를 보자.
fun readNumber(reader: BufferedReader): Int? {
try {
return Integer.parseInt(reader.readLine())
} catch (e: NumberFormatException) {
return null
} finally {
reader.close()
}
}
readNumber(BufferedReader(StringReader("239"))) // 239 출력
자바 코드와의 차이점은 throws 절이 코드에 없다는 점이다.
자바는 checked Exception을 처리해줘야하기 때문에. 위와 같은 코드를 자바에서 작성할때는
IOException이 발생할 수 있으므로 catch 절에서 잡지 않으면 throws IOException으로 상위 함수에 익셉션을 던져야 한다.
**하지만 코틀린에서는 checked Exception과 unchecked Exception을 구분하지 않는다.
코틀린에서는 함수가 던지는 예외를 지정하지 않고 발생한 예외를 잡아내도 되고 잡아내지 않아도 된다.(p.98)
자바 7부터 지원하는 try-with-resource는 코틀린은 지원하지 않는다.
try를 식으로 사용
- 위에서 작성한 코드에서 finally 절을 없애고 파일에서 읽은 수를 출력하는 코드를 작성하자.
fun readNumber(reader: BufferedReader) {
val number = try {
Integer.parseInt(reader.readLine())
} catch (e: NumberFormatException) {
null
}
println(number)
}
readNumber(BufferedReader(StringReader("No Number"))) // null 출력
코틀린의 try 키워드는 if나 when과 마찬가지로 식이므로 try의 값을 변수에 대입할 수 있다.
만약 내부에 여러 문장이 있으면 마지막 식의 값이 전체 결과 값이 된다.
Comments