References: Do it! 코틀린 프로그래밍

코틀린에서의 예외처리 방법에 대해 알아봅니다.

 

 

1. 예외처리.

 

코틀린에서의 예외처리는 try ... catch(e: Exception) ... 으로 처리합니다.

DividedByZero예시를 통해 확인해 보겠습니다.

 

fun main() {
    val a = 1
    val b = 0
    val c: Int
    try{ c = a/b }
    catch(e: Exception){ println("Divided by 0 exception.") }
    finallyprintln("Finally block. ") }
}

 

위의 코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다.

오류가 발생했다는 것을 확인할 수 있습니다.

 

지금은 코드가 짧으니 발생한 위치를 바로 찾을 수 있지만 대규포 프로그램에선 위치를 찾기가 힘들 수 도 있습니다.

이럴떄 스택 추적 기능을 이용하면 예외가 발생한 위치를 찾을 수 있습니다.

코드를 다음과 같이 수정해 봅시다.

 

fun main() {
    val a = 1
    val b = 0
    val c: Int
    try{ c = a/b }
    catch(e: Exception){
        println("Divided by 0 exception.")
        e.printStackTrace()
    }
    finally{ println("Finally block. ") }
}

 

예외 인자에 printStackTrace()를 실행하면 어디서 예외가 발생했는지 추적을 할 수 있습니다.

실행 결과는 다음과 같습니다.

 

 

2. 사용자 예외 클래스

 

코틀린은 여러 예외 클래스를 미리 지정해 둡니다. 미리 지정된 예외 클래스에 유저가 필요한게 없으면 어떻게 할까요?

유저가 원하는 예외클래스를 직접 정의하는 기능을 코틀린은 제공합니다.

 

다음과 같은 예시를 통해 확인해 보겠습니다

 

class InvalidNameException(message: String): Exception(message)
fun validateName(name: String){
    if(name.matches(Regex(".*\\d+.*"))) { throw InvalidNameException("Your name: $name : contains numerals.") }
}
fun main() {
    var name = "smoh92"
    try{ validateName(name) }
    catch(e: InvalidNameException){ println(e.message) }
    catch(e: Exception){ println(e.message) }
}

 

우선 InvalidNameException클래스를 정의합니다.

이후 위에서 정의한 예외 클래스를 사용하는 함수를 정의합니다. 이 함수는 이름에 숫자가 포함되면 InvalidNameException예외를 발생시킵니다.

 

실행 결과는 다음과 같습니다.

 

 

 

 

반응형

'Programming' 카테고리의 다른 글

[Kotlin] 22. 상속(Inheritance)  (0) 2019.08.24
[Kotlin] 21. 생성자  (0) 2019.08.24
[Kotlin] 19. 라벨  (0) 2019.08.23
[Kotlin] 18. 반복문  (0) 2019.08.23
[Kotlin] 17. 조건문  (0) 2019.08.23

+ Recent posts