[swift] 제어문을 이용한 예외 처리

안녕하세요! 이번에는 Swift에서 제어문을 이용한 예외 처리에 대해 알아보겠습니다.

1. 예외 처리란?

예외 처리란, 프로그램 실행 중에 예기치 않은 상황이 발생했을 때 이를 적절하게 처리하는 것을 말합니다. 예외는 일반적으로 프로그램의 오류, 잘못된 입력, 외부 자원 접근 실패 등의 상황에서 발생할 수 있습니다.

Swift에서는 do-catch 구문을 사용하여 예외 처리를 할 수 있습니다. do 블록 내에서 예외가 발생하면, catch 블록에서 처리합니다.

do {
    // 예외가 발생할 수 있는 코드
} catch {
    // 예외 처리 코드
}

2. 예외 발생과 처리 예제

예외 발생과 처리를 예제를 통해 알아보겠습니다. 예를 들어, 사용자로부터 입력받은 값을 숫자로 변환하는 함수가 있다고 가정해봅시다. 이 함수는 입력값이 숫자가 아닐 경우 예외를 발생시킬 수 있습니다.

func convertToInt(_ value: String) throws -> Int {
    guard let intValue = Int(value) else {
        throw MyError.invalidInput
    }
    return intValue
}

enum MyError: Error {
    case invalidInput
}

위의 코드에서 convertToInt 함수는 입력값을 정수로 변환하며, 입력값이 정수로 변환될 수 없을 경우 MyError.invalidInput 예외를 발생시킵니다.

do {
    let userInput = "123"
    let intValue = try convertToInt(userInput)
    print("변환된 정수 값: \(intValue)")
} catch {
    print("입력값이 잘못되었습니다.")
}

위의 예제에서는 "123" 이라는 사용자 입력값을 convertToInt 함수에 전달하고 반환된 정수값을 출력하는 예제입니다. 만약 사용자가 숫자 대신 문자를 입력한다면 catch 블록에서 입력값이 잘못되었다는 메시지가 출력될 것입니다.

3. 다중 catch 블록

Swift에서는 다중 catch 블록을 사용하여 예외를 처리하는 것도 가능합니다. 다중 catch 블록은 예외 타입별로 처리 코드를 구분하여 처리할 수 있게 합니다.

do {
    // 예외가 발생할 수 있는 코드
} catch MyError.invalidInput {
    // 입력값이 잘못된 경우 처리 코드
} catch MyError.outOfBounds {
    // 범위를 벗어난 경우 처리 코드
} catch {
    // 기타 예외 처리 코드
}

위의 예제에서는 MyError 열거형 타입의 invalidInput 예외와 outOfBounds 예외를 각각 다른 방식으로 처리하는 코드입니다. 마지막 catch 블록은 어떤 타입의 예외든 처리 가능한 기타 예외 처리 코드입니다.

4. finally 블록

Swift에서는 finally 블록을 사용하여 예외 발생 여부와 관계없이 항상 실행되는 코드를 작성할 수 있습니다. finally 블록은 do-catch 블록 뒤에 작성하며, 예외 발생 여부와 관계없이 항상 실행되기 때문에 자원의 해제 등의 작업을 처리할 때 유용하게 사용할 수 있습니다.

do {
    // 예외가 발생할 수 있는 코드
} catch {
    // 예외 처리 코드
} finally {
    // 예외 발생 여부와 관계없이 항상 실행되는 코드
}

finally 블록은 선택 사항이기 때문에 작성하지 않아도 됩니다.

5. 참고 자료

이번 포스트에서는 Swift에서 제어문을 이용한 예외 처리에 대해 알아보았습니다. 예외 처리는 프로그램의 안정성을 높이고 예상치 못한 상황에 대응할 수 있는 중요한 기능이므로, 적절하게 활용해 보시기 바랍니다. 감사합니다!