본문 바로가기

Study/Kotlin Study

[Kotlin] 예외 처리

+ 항공대학교 김철기 교수님의 객체 지향 프로그래밍 과목 내용를 정리한 글입니다.

예외 던지기

- 함수의 비정상적인 상황 발생 시 throw 문을 통하여 예외를 던질 수 있다. (예외를 받지 않으면 비정상 종료)

fun main() {
    val str = "10110110"
    println(parseIntNumberInBinary(str)) // 182
}
// 2진수 문자열을 입력 받아 10진수로 변환 후 반환하는 함수
fun parseIntNumberInBinary(s: String): Int {
    var num = 0

    if (s.length !in 1 .. 31) throw NumberFormatException("Not a Number: $s")
    // String s의 길이가 1 ~ 31 범위가 아니라면 s는 Int형 범위를 벗어나므로 예외 throw

    for (c in s) {
        if (c !in '0' .. '1') throw NumberFormatException("Not a Number: $s")
        // 0, 1로만 이루어져 있는 문자열이 아닌 경우 예외 throw
        num = num * 2 + (c - '0')
        // c - '0': c가 '1'이라면 1, '0'이라면 0
        // 현재까지 s로부터 받은 c들을 계산한 값에 2를 곱하고 현재 c를 더하는 방식
    }
    return num
}

try-catch 문으로 예외 처리하기

- 안에서 던진 예외를 try-catch 문으로 처리할 수 있다.

- 던져진 예외가 try-catch 문으로 처리되지 않으면 프로그램이 예외로 비정상 종료된다.

fun main() {
    val string = readInt(1000)
    println(string)
}

// 입력 받고 정수로 변환하는 함수
fun readInt(default: Int): Int {
    try {
        return readLine()!!.toInt()
    }
    catch (e: java.lang.NumberFormatException) { 
        // 위 try문 내에서 NumberFormatException 발생 시 (숫자가 아닌 것 입력)
        return default // default 값 반환
    }
}

- pdf 코드 오류: int => Int


try-catch 문을 식처럼 이용하기

- if 문처럼 try-catch문도 식처럼 사용할 수 있다.

fun main() {
    val string = readInt(1000)
    println(string)
}

// 입력 받고 정수로 변환하는 함수
fun readInt(default: Int) = try {
    readLine()!!.toInt() // return 생략
} catch (e: java.lang.NumberFormatException) {
    default // return 생략
}

finally 구문을 통해서 자원 정리 하기

- finally 구문에 있는 문장들은 예외 발생 여부와 관계없이 무조건 수행된다. (try - (catch) - finally)

- try 구문 안에서 사용한 자원을 정리할 때 유용하다. (프로그램이 종료될 때 꼭 실행되어야 하는 코드)

fun main() {
    val string = readInt(1000)
    println(string)
}

// 입력 받고 정수로 변환하는 함수
fun readInt(default: Int) = try {
    readLine()!!.toInt() // return 생략
} finally {
    println("자원 정리")
}

'Study > Kotlin Study' 카테고리의 다른 글

[Kotlin] 함수  (4) 2023.09.03
[Kotlin] 클래스 정의하기  (1) 2023.08.28
[Kotlin] 루프 (반복문)  (2) 2023.08.24
[Kotlin] 조건문  (2) 2023.08.23
[Kotlin] 패키지: 패키지 개요  (2) 2023.08.22