코틀린의 예외처리는 자바나 다른 언어의 예외(exception) 처리와 비슷하다.
함수는 정상적으로 종료할 수 있지만 오류가 발생하면 예외를 던질(throw) 수 있다.
여기서 함수 호출하는 쪽에서는 그 예외를 잡아 처리할 수 있다.
만약, 발생한 예외를 함수 호출 단에서 처리(catch)하지 않으면 함수 호출 스택을 거슬러 올라가면서 예외를 처리하는 부분이 나올 때까지 예외를 다시 던진다(rethrow)
fun percentageCheck(percent : Int): Int {
if(percent !in 0..100) {
throw IllegalArgumentException(
"A percentage value must be between 0 and 100 : $percent")
}else {
return percent
}
}
println(percentageCheck(101))
fun percentageCheck(percent : Int): Int {
if(percent in 0..100) {
return percent
}else {
throw IllegalArgumentException(
"A percentage value must be between 0 and 100 : $percent")
}
}
println(percentageCheck(101))
try, catch, finally
예외 처리를 하려면 자바와 같이 try, catch, finally 절을 함께 사용한다.
fun readNumber(reader : BufferedReader) : Int? {
return try {
val line = reader.readLine()
Integer.parseInt(line)
} catch (e: java.lang.NumberFormatException) {
null
} finally {
reader.close()
}
}
val reader = BufferedReader(StringReader("3329"))
println(readNumber(reader))
자바 코드와 가장 큰 차이는 throws(이 경우 s가 붙음) 절이 코드에 없다는 점이다.
자바에서는 함수를 작성할 때, 함수 선언 뒤에 throws IOException 을 붙어야 한다.
이유는 IOException 이 체크 예외이기 때문이다. 자바에서는 체크 예외를 명시적으로 처리해야 한다.
그리고 코틀린은 자바에 있는 try-with-resource 문법을 제공하지 않는다.
하지만 라이브러리 함수로 같은 기능을 구현할수 있다.
try 를 식으로 사용
자바와 코틀린의 중요한 차이인 식.
finaly 절을 없애고 파일에 읽은 수를 출력하는 코드를 추가해보자.
fun readNumber(reader: BufferedReader) {
val number = try {
Integer.parseInt(reader.readLine())
} catch (e: NumberFormatException) {
println("예외 발생")
return
//null
}
println(number)
}
val reader = BufferedReader(StringReader("not a number"))
readNumber(reader)
try 키워드는 if 나 when 과 마찬가지로 식이다.
따라서 try의 값을 변수에 대입할 수 있다.
if 와 달리 try의 본문을 반드시 중괄호 { } 로 둘러써야 한다.
'Language > Kotlin' 카테고리의 다른 글
[Kotlin IN ACTION] - Kotlin 컬렉션 처리 (0) | 2022.07.21 |
---|---|
[Kotlin IN ACTION] - Kotlin 함수 정의와 호출(확장함수) (0) | 2022.07.18 |
[Kotlin IN ACITON] - Kotlin while & for loop (반복문) (0) | 2022.07.14 |
[Kotlin IN ACTION] - Kotlin 스마트 캐스트 (0) | 2022.07.09 |
[Kotlin IN ACTION] - Kotlin 클래스와 프로퍼티 (0) | 2022.07.05 |