[swift] 제어문을 이용한 에러 핸들링

Swift에서 에러를 처리할 때는, 조건문과 제어문을 효율적으로 활용할 수 있습니다. 제어문을 이용하여 원하는 동작을 수행하거나 에러를 처리할 수 있습니다. 이번 블로그 포스트에서는 Swift에서 제어문을 이용한 에러 핸들링에 대해 알아보도록 하겠습니다.

1. if문을 이용한 에러 핸들링

if문을 이용하여 에러를 핸들링할 수 있습니다. if문은 조건을 평가하여 해당 조건이 참인 경우에만 코드를 실행합니다. 따라서, 에러 조건을 if문으로 검사하고, 조건이 참인 경우 원하는 동작을 수행할 수 있습니다.

func divide(a: Int, b: Int) {
    if b != 0 {
        let result = a / b
        print("나눗셈 결과는 \(result)입니다.")
    } else {
        print("0으로 나눌 수 없습니다.")
    }
}

divide(a: 10, b: 2) // Output: 나눗셈 결과는 5입니다.
divide(a: 10, b: 0) // Output: 0으로 나눌 수 없습니다.

위의 예시에서는 b의 값이 0이 아닌 경우에만 divide 함수를 실행하고, 0인 경우에는 “0으로 나눌 수 없습니다.”라는 에러 메시지를 출력합니다.

2. guard문을 이용한 에러 핸들링

guard문은 조건이 false인 경우에만 코드를 실행하고, 조건이 true인 경우에는 다음 코드를 계속 실행할 수 있도록 합니다. guard문은 주로 조건을 만족하지 않으면 함수를 빠르게 종료하는 용도로 사용됩니다.

func divide(a: Int, b: Int) {
    guard b != 0 else {
        print("0으로 나눌 수 없습니다.")
        return
    }

    let result = a / b
    print("나눗셈 결과는 \(result)입니다.")
}

divide(a: 10, b: 2) // Output: 나눗셈 결과는 5입니다.
divide(a: 10, b: 0) // Output: 0으로 나눌 수 없습니다.

위의 예시에서는 guard문을 사용하여 b의 값이 0인 경우에는 “0으로 나눌 수 없습니다.”라는 에러 메시지를 출력하고 함수를 종료합니다.

3. switch문을 이용한 에러 핸들링

switch문을 이용하여 여러 가지 에러 상황에 대해 처리할 수 있습니다. switch문은 입력된 값에 따라 다른 동작을 수행하도록 도와줍니다. 각 case는 다른 에러 조건을 나타내고, 해당 조건에 맞는 코드를 실행합니다.

enum NetworkError: Error {
    case timeout
    case invalidURL
    case serverError
}

func handleNetworkError(error: NetworkError) {
    switch error {
    case .timeout:
        print("네트워크 연결 시간이 초과되었습니다.")
    case .invalidURL:
        print("유효하지 않은 URL입니다.")
    case .serverError:
        print("서버에서 오류가 발생했습니다.")
    }
}

handleNetworkError(error: .timeout) // Output: 네트워크 연결 시간이 초과되었습니다.
handleNetworkError(error: .invalidURL) // Output: 유효하지 않은 URL입니다.
handleNetworkError(error: .serverError) // Output: 서버에서 오류가 발생했습니다.

위의 예시에서는 NetworkError라는 열거형을 정의하고, 에러 상황에 대한 case를 나타냅니다. handleNetworkError 함수에서는 switch문을 이용하여 각 case에 맞는 에러 메시지를 출력합니다.


위에서 소개한 if문, guard문, switch문을 이용하여 Swift에서 에러를 효과적으로 핸들링할 수 있습니다. 이러한 제어문을 적절히 활용하여 코드의 안정성과 에러 처리의 효율성을 높이는 것이 중요합니다.

참고 자료: