[swift] 구조체와 열거형의 저장 및 전송 방법

Swift에서 구조체와 열거형은 강력한 데이터 타입으로, 이들을 효율적으로 저장하고 전송하는 방법을 알고 있어야 합니다.

구조체 (Struct)

구조체는 값을 저장하거나 어떠한 종류의 데이터도 포함할 수 있는 타입입니다. 구조체는 일반적으로 관련된 데이터를 묶어서 표현하고자 할 때 유용합니다. 구조체에는 변수와 상수를 포함시킬 수 있으며, 함수도 추가할 수 있습니다.

구조체의 인스턴스를 저장하려면 NSKeyedArchiver를 이용하여 직렬화하고, NSKeyedUnarchiver를 이용하여 역직렬화해야 합니다. 직렬화(serialization)는 데이터를 그대로 저장할 수 있는 형태로 변환하는 작업이며, 역직렬화(deserialization)는 저장된 데이터를 다시 사용할 수 있는 형태로 변환하는 작업입니다.

예를 들어, 구조체 Person을 저장하고 다시 불러오는 방법은 다음과 같습니다.

struct Person: Codable {
    var name: String
    var age: Int
}

let person = Person(name: "John", age: 30)
do {
    let encodedData = try JSONEncoder().encode(person)
    UserDefaults.standard.set(encodedData, forKey: "personData")
    if let decodedData = UserDefaults.standard.object(forKey: "personData") as? Data {
        let decodedPerson = try JSONDecoder().decode(Person.self, from: decodedData)
        print("Decoded person:", decodedPerson)
    }
} catch {
    print("Error:", error)
}

열거형 (Enum)

열거형은 관련된 값들의 그룹을 정의할 때 사용되며, 연관값(associated values)을 가질 수 있습니다. 열거형은 주로 유사한 종류의 값들을 묶어서 사용하고자 할 때 유용합니다.

열거형의 인스턴스를 저장하고 불러올 때에도 NSKeyedArchiverNSKeyedUnarchiver를 사용할 수 있습니다.

다음은 열거형 CompassDirection을 저장하고 다시 불러오는 예시입니다.

enum CompassDirection: String, Codable {
    case north, south, east, west
}

let direction = CompassDirection.north
do {
    let encodedData = try JSONEncoder().encode(direction)
    UserDefaults.standard.set(encodedData, forKey: "directionData")
    if let decodedData = UserDefaults.standard.object(forKey: "directionData") as? Data {
        let decodedDirection = try JSONDecoder().decode(CompassDirection.self, from: decodedData)
        print("Decoded direction:", decodedDirection)
    } 
} catch {
    print("Error:", error)
}

위의 예제에서 Codable 프로토콜은 JSONEncoderJSONDecoder를 이용하여 구조체와 열거형을 인코딩하고 디코딩할 수 있도록 합니다.

구조체와 열거형의 저장 및 전송 방법에 대한 자세한 내용은 Swift 공식 문서를 참고하세요.

위에 제시한 예제를 통해, 구조체와 열거형을 저장하고 전송하는 방법에 대해 알아보았습니다. 앱 개발을 위해 구조체와 열거형을 효과적으로 활용할 수 있도록 연구해보시기 바랍니다.