[swift] 컬렉션의 에러 처리

컬렉션을 다루다 보면 에러 처리가 필요한 경우가 있습니다. 예를 들어, 컬렉션에서 특정 인덱스의 요소를 읽거나 쓸 때, 해당 인덱스가 유효하지 않은 경우가 발생할 수 있습니다. SwiftArrayDictionary와 같은 컬렉션에서의 에러 처리 방법을 알아보겠습니다.

서브스크립트를 통한 에러 처리

Swift는 서브스크립트를 통해 컬렉션의 각 요소에 접근할 수 있습니다. 이때, 인덱스가 유효하지 않은 경우를 대비하여 서브스크립트로부터 에러를 처리하는 방법이 있습니다.

extension Array {
    enum Error: Swift.Error {
        case indexOutOfRange
    }
    
    subscript(safe index: Int) throws -> Element {
        guard index >= 0 && index < count else {
            throw Error.indexOutOfRange
        }
        
        return self[index]
    }
}

do {
    let numbers = [1, 2, 3, 4, 5]
    let element = try numbers[safe: 5] // 인덱스가 유효하지 않은 경우 에러 발생
} catch {
    print("에러 발생: \(error)")
}

위 예제에서는 Array를 확장하여 safe 라벨을 가진 서브스크립트를 추가하여 유효하지 않은 인덱스에 접근하였을 때 Error.indexOutOfRange 에러를 던지도록 구현하였습니다.

에러 처리를 위한 옵셔널 반환

또 다른 방법은 옵셔널을 반환하여 에러 처리하는 방법입니다.

extension Array {
    subscript(safe index: Int) -> Element? {
        guard index >= 0 && index < count else {
            return nil
        }
        
        return self[index]
    }
}

let numbers = [1, 2, 3, 4, 5]
if let element = numbers[safe: 3] {
    print("인덱스 3의 값: \(element)") // 인덱스가 유효한 경우에만 값 출력
} else {
    print("유효하지 않은 인덱스")
}

위 예제에서는 옵셔널을 반환하여 유효하지 않은 인덱스에 접근하였을 때 nil을 반환하도록 구현하였습니다.

컬렉션에서의 에러 처리는 안전한 코드를 작성하는 데 도움을 주며, 에러 상황을 미리 처리할 수 있도록 도와줍니다. 사용하고자 하는 상황에 맞게 적절한 방법을 선택하여 컬렉션을 안전하게 다루도록 합시다.

References


이 글은 Swift를 사용하여 컬렉션의 에러 처리 방법에 대해 알아보았습니다. 컬렉션을 다뤄야 하는 경우에는 해당하는 데이터를 안전하게 다루기 위한 에러 처리 방법을 숙지하는 것이 중요합니다.