본문 바로가기
2023년 이전/kotlin

코틀린(Kotlin)- 코틀린의 예외 처리

by JeongUPark 2019. 10. 11.
반응형

[출처 -  Kotlin In Action] [아래 내용들은 Kotlin In Action을 공부하면서 스스로 정리한 내용입니다] 

 

kotlin의 예외 처리는 Java와 크게 다르지 않습니다. kotlin 문법으로 작성한다는 부분만 다를 것입니다.

 

그럼 code를 통해서 확인해 보겠습니다.

if(percentage ! in 0..100){
 throw IllegalArgumentException("A percentage value must be between 0 and 100 : $percentage")
 }
 //or
 var percentage = 
 if(number in 0 .. 100){
    number
 }else{
     throw IllegalArgumentException("A percentage value must be between 0 and 100 : $number")
 }

로 Java와 큰 차이가 없음을 확인 할 수 있습니다. 또한, try catch 문 역시 Java와 다르지 않습니다.

fun readNumber(reader: BufferedReader): Int? {
    try {
        val line = reader.readLine()
        return Integer.parseInt(line)
    }
    catch (e: NumberFormatException) {
        return null
    }
    finally {
        reader.close()
    }
}

fun main(args: Array<String>) {
    val reader = BufferedReader(StringReader("239"))
    println(readNumber(reader))
}

기본적으로 위와 같은 형태를 취할 수 있습니다. try 블록 안에서 실행을 하고, 정상적으로 수행이 끝나면 finally 블록을 수행합니다. 그러나 try 블록에서 exception이 발생하면 catch 블록이 수행되고 마지막으로 finally 블록이 수행 됩니다.

 

조금 더 kotlin 스럽게 code를 작성하면, try를 식으로 사용할 수 있습니다.

fun readNumber(reader: BufferedReader) {
    val number = try {
        Integer.parseInt(reader.readLine())
    } catch (e: NumberFormatException) {
        null
    }

    println(number)
}

fun main(args: Array<String>) {
    var reader = BufferedReader(StringReader("239"))
    readNumber(reader)
    reader = BufferedReader(StringReader("not a number"))
    readNumber(reader)
}

위의 경우 239는 숫자이기 때문에 239가 출력이 되고, not a number는 숫자 아닌 문자이기 때문에 catch 부분이 동작하고 null 이 출력 됩니다.

 

반응형