코틀린의 기본 예외 처리 구문은 자바와 비슷하다.
다만, 자바와 달리 코틀린의 throw는 식이므로 다른 식에 포함될 수 있다.
val percentage =
if (number in 0..100)
number
else
throw IllegalArgumentException("value must be between 0 and 100: $number")
이 예제에서는 조건이 거짓이면 변수가 초기화되지 않는다.
2.5.1 try, catch, finally
fun readNumber(reader: BufferedReader): Int? { // 함수가 던질 수 있는 예외를 명시할 필요가 없다.
try {
val line = reader.readLine()
return Integer.parseInt(line)
}
catch (e: NumberForamtException) {
return null
}
finally {
reader.close()
}
}
자바 코드와 가장 큰 차이는 throws 절이 코드에 없다는 점이다. 자바에서는 함수를 작성할 때 함수 선언 뒤에 throws IOException(checked exception 이므로)을 붙여야 한다.
코틀린은 checked exception과 unchecked exception을 구별하지 않는다.
2.5.2 try를 식으로 사용
자바와 코틀린의 중요한 차이를 하나 더 살펴보기 위해 방금 살펴본 예제를 살짝 고쳐본다.
fun readNumber(reader: BufferedReader) {
val number = try {
Integer.parseInt(reader.readLine()) // 이 식의 값이 "try"식의 값이 된다.
} catch (e: NumberFormatException) {
return
}
println(number)
}
>>> val reader = BufferedReader(StringReader("not a number"))
>>> readNumber(reader) // 아무것도 출력되지 않는다.
코틀린의 try 키워드는 if나 when과 마찬가지로 식이다. 따라서 try의 값을 변수에 대입할 수 있다. if와 달리 try의 본문을 반드시 중괄호 {}로 둘러싸야 한다. 다른 문장과 마찬가지로 try의 본문도 내부에 여러 문장이 있으면 마지막 식의 값이 전체 결과 값이다.
예외 발생 시, 계속 진행하고 싶다면, catch 블록도 값을 만들어야한다.
fun readNumber(reader: BufferedReader) {
val number = try {
Integer.parseInt(reader.readLine()) // 이 식의 값이 "try"식의 값이 된다.
} catch (e: NumberFormatException) {
null
}
println(number)
}
>>> val reader = BufferedReader(StringReader("not a number"))
>>> readNumber(reader)
null
'Kotlin' 카테고리의 다른 글
[Kotlin in Action] 3.2 함수를 호출하기 쉽게 만들기 (0) | 2025.03.14 |
---|---|
[Kotlin in Action] 3.1 코틀린에서 컬렉션 만들기 (0) | 2025.03.14 |
[Kotlin in Action] 2.4 대상을 이터레이션: while과 for 루프 (0) | 2025.03.14 |
[Kotlin in Action] 2.3 선택 표현과 처리: enum과 when (0) | 2025.03.14 |
[Kotlin in Action] 2.2 클래스와 프로퍼티 (0) | 2025.03.14 |
댓글