728x90
반응형
✅ 코틀린의 예외 처리
- 코틀린의 예외 처리는 자바나 다른 언어의 예외 처리와 비슷함
- 함수는 정상적으로 종료할 수 있지만 오류가 발생하면 예외를 던질 수 있음
- 함수를 호출하는 쪽에서는 그 예외를 잡아 처리할 수 있음
// 코틀린의 기본 예외 처리 구문은 자바와 비슷함
if (percentage !in 0..100) {
throw IllegalArgumentException (
"A percentage value must be between 0 and 100: $percentage")
}
- 다른 클래스와 마찬가지로 예외 인스턴스를 만들 때도 new를 붙일 필요가 없음
- 자바와 달리 코틀린의 throw는 식이므로 다른 식에 포함될 수 있음
val percentage =
if (number in 0..100)
number
else
throw IllegalArgumentException ( // "throw"는 식
"A percentage value must be between 0 and 100: $number")
📌 try, catch, finally
- 자바와 마찬가지로 예외 처리를 하기 위해 try, catch, finally 절을 함께 사용함
// 자바와 마찬가지로 try 사용하기
fun readNumber(reader : BufferedReader) : Int? { // 함수가 던질 수 있는 예외를 명시할 필요 없음
try {
val line = reader.readLine()
return Integer.parseInt(line)
}
catch (e: NumberFormatException) { // 예외 타입을 :의 오른쪽에 작성
return null
}
finaly {
reader.close() // "finally"는 자바와 똑같이 작동함
}
}
val reader = BufferedReader(StringReader("239"))
println(readNumber(reader)) // 239
- 자바 코드와 가장 큰 차이는 throws 절이 코드에 없다는 점
- 코틀린에서는 함수가 던지는 예외를 지정하지 않고 발생한 예외를 잡아내도 되고 잡아내지 않아도 됨(함수가 던질 수 있는 예외를 선언하지 않아도 됨)
📌 try를 식으로 사용
// 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()) // 예외가 발생하지 않으면 이 값을 사용
} catch(e: NumberFormatException) {
null // 예외가 발생하면 null 값을 사용
}
println(number)
}
val reader = BufferedReader(StringReader("not a number"))
readNumber(reader) // null -> 예외가 발생했으므로 함수가 "null"을 출력
- try 코드 블록의 실행이 정상적으로 끝나면 그 블록의 마지막 식의 값이 결과임
- 예외가 발생하고 잡히면 그 예외에 해당하는 catch 블록의 값이 결과
728x90
반응형
'Studying > Kotlin' 카테고리의 다른 글
[Kotlin In Action] 3장. 함수 정의와 호출(2) - 확장 함수와 확장 프로퍼티 (0) | 2023.05.02 |
---|---|
[Kotlin In Action] 3장. 함수 정의와 호출(1) - 컬렉션과 함수 만들기 (0) | 2023.05.02 |
[Kotlin In Action] 2장. 코틀린 기초(3) - while과 for 루프 (0) | 2023.04.24 |
[Kotlin In Action] 2장. 코틀린 기초(2) - enum과 when (0) | 2023.04.24 |
[Kotlin In Action] 2장. 코틀린 기초(1) - 함수와 변수 / 클래스와 프로퍼티 (0) | 2023.04.20 |