[swift] 에러 처리

Swift에서는 에러 처리를 할 수 있는 다양한 방법을 제공합니다. 이번 포스트에서는 에러 처리를 위한 주요 기능들을 살펴보도록 하겠습니다.

1. 에러 타입 정의하기

먼저, 에러를 나타내기 위한 타입을 정의해야 합니다. Swift에서는 Error 프로토콜을 채택한 타입을 사용하여 에러를 표현합니다.

enum NetworkError: Error {
    case invalidURL
    case requestFailed(Int)
    case invalidResponse
}

위의 예시에서는 NetworkError라는 열거형을 정의하고, 각 케이스들로 각각의 에러를 표현하고 있습니다.

2. 에러 발생시키기

에러가 발생할 가능성이 있는 부분에서 throw 키워드를 사용하여 에러를 발생시킬 수 있습니다.

func fetchDataFromServer(urlString: String) throws -> Data {
    guard let url = URL(string: urlString) else {
        throw NetworkError.invalidURL
    }

    // 네트워크 요청 로직

    return data
}

fetchDataFromServer 함수는 주어진 URL의 데이터를 가져오는 기능을 수행합니다. URL이 올바르지 않은 경우 invalidURL 에러를 발생시킵니다.

3. 에러 처리하기

에러가 발생할 가능성이 있는 코드를 try 키워드와 함께 사용하여 실행하면, 해당 코드에서 에러가 발생하면 실행이 중지되고 catch 블록으로 이동합니다.

do {
    let data = try fetchDataFromServer(urlString: "https://example.com")
    // 데이터 처리 로직
} catch NetworkError.invalidURL {
    print("잘못된 URL입니다.")
} catch NetworkError.requestFailed(let statusCode) {
    print("요청이 실패했습니다. 상태 코드: \(statusCode)")
} catch {
    print("알 수 없는 에러가 발생했습니다.")
}

위의 예시에서는 fetchDataFromServer 함수를 호출할 때 try 키워드를 사용하여 에러가 발생할 가능성을 처리하고 있습니다. 그리고 catch 블록으로 넘어와서 에러에 따라 적절한 처리를 하고 있습니다.

4. 옵셔널 바인딩과 함께 사용하기

에러 처리를 할 때 옵셔널 바인딩과 함께 사용하면 좀 더 안전하고 간결한 코드를 작성할 수 있습니다.

if let data = try? fetchDataFromServer(urlString: "https://example.com") {
    // 데이터 처리 로직
} else {
    print("에러가 발생했습니다.")
}

위의 예시에서는 try? 키워드를 사용하여 fetchDataFromServer 함수를 호출하고 있습니다. 만약 에러가 발생하면 datanil이 할당되고, 에러가 발생하지 않으면 옵셔널에 데이터가 할당됩니다. 이를 통해 간결하게 에러 처리를 할 수 있습니다.

결론

Swift에서는 에러 처리를 위해 Error 프로토콜과 throw, try, catch 등을 사용합니다. 올바른 에러 처리를 통해 안정성 높은 앱을 개발할 수 있습니다.

참고 자료