Notice
Recent Posts
Recent Comments
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

훌륭한 개발자가 되기 위하여

예외 처리란? 본문

Kotlin

예외 처리란?

jay20033 2024. 7. 15. 21:13

예외가 발생할 때 어떻게 처리할지 미리 대처해야 한다. 그렇지 않으면 예외 사항 발생 시 프로그램이 종료될 수 있기 때문이다.

예외가 발생하더라도 프로그램을 종료시키지 않고 정상적으로 대응할 수 있고, 강제로 예외를 발생시킬 수 있다.

try-catch-finally 구문으로 예외 처리

try 영역은 생략할 수 없으며 정상적으로 수행해야 할 구문을 작성한다.

try 영역에서 작성한 구문이 실행될 때 예외가 발생하는지에 따라 실행 흐름이 달라지는데 catch 영역에는 try영역에서 예외가 발생했을 때 수행할 구문을 작성한다. -> 예외 처리 내용을 작성하는 영역이다.

만약 try 영역에서 예외가 발생하지 않으면 catch 영역에 있는 구문은 실행되지 않는다.

finally 영역은 마지막에 무조건 실행되는 구문이다.

 

fun main(args: Array<String>) {
    try {
        println("try")
        val data: String = "abc"
        val intData: Int = data.toInt()
        println("end")
    } catch (e: Exception) {
        println("catch...${e.toString()}")
    } finally {
        println("finally..")
    }
}

 

실행 결과

 

문자열 타입인 data를 Int 타입으로 캐스팅을 시도하지만 캐스팅이 불가능하므로 실행시 예외가 발생하고 예외가 발생함에 따라 catch 구문이 실행되고 마지막으로 finally문이 실행됩니다.

 

catch 문을 여러개 정의한 경우

try 영역에서 발생하는 예외 타입이 여러기지 일 경우 발생하는 예외 타입에 대한 catch 문을 여러 개 작성하여 예외 처리를 따로 해주면 된다.

fun ex(array:Array<Any>) {
    try {
        println("try...")
        val intData: Int = array[0] as Int
        val data: String = array[2] as String
        val data2: Int = data.toInt()
    } catch (e: ClassCastException) {
        println("catch... ClassCastException")
    } catch (e: ArrayIndexOutOfBoundsException){
        println("catch... ArrayIndexOutOfBoundsException")
    } catch (e: Exception){
        println("catch... Exception... ${e.toString()}")
    }
}

fun main(args: Array<String>) {
    // 캐스팅 예외
    val array:Array<Any> = arrayOf("0", 1, "6")
    ex(array)

    // 배열 데이터 접근 예외
    val array2:Array<Any> = arrayOf(10, "5")
    ex(array2)

    // 숫자 타입 예외
    val array3:Array<Any> = arrayOf(10, 0, "world")
    ex(array3)
}

catch문 여러 개 실행 결과

 

예외 발생시키기

예외 발생은 `throw` 키워드를 이용하며 throw 뒤에 Exception 클래스 객체를 명시하면 해당 예외가 발생한다.

fun ex(data: Int): Int {
    if(data < 1)
        throw Exception("1보다 작은 경우 예외 발생")
    else {
        var sum = 0
        for (i in 0..data) {
           sum += i
        }
        return sum
    }
}

fun main(args: Array<String>) {
    try {
        println("${ex(5)}")
        println("${ex(-1)}")
    } catch (e: Exception){
        println("Exception... ${e.toString()}")
    }
}

실행 결과