[swift] Codable 프로토콜을 이용한 데이터 직렬화 및 역직렬화

iOS 앱을 개발하다 보면 네트워크 통신을 통해 JSON 데이터를 주고받아야 하는 경우가 많습니다. 이때 Swift의 Codable 프로토콜을 사용하면 데이터 모델을 JSON으로 직렬화하거나 반대로 JSON을 데이터 모델로 역직렬화할 수 있습니다. 이번 포스트에서는 Codable 프로토콜을 이용하여 데이터 직렬화와 역직렬화를 간단한 예제를 통해 살펴보겠습니다.

Codable 프로토콜

Codable 프로토콜은 Swift 4에서 도입되었으며, Encodable과 Decodable 프로토콜을 결합한 것입니다. Codable을 채택한 타입은 JSON, Property List 등으로 변환될 수 있습니다. Codable을 준수하기 위해서는 타입 내의 속성들 또한 Codable을 준수해야 합니다.

struct MyStruct: Codable {
    let name: String
    let age: Int
}

위의 코드에서 MyStruct는 Codable 프로토콜을 준수하고 있습니다. name과 age 속성은 모두 Codable을 준수하는 타입이어야 합니다.

데이터 직렬화

데이터 모델을 JSON으로 직렬화하기 위해서는 JSONEncoder를 사용합니다.

let myStruct = MyStruct(name: "John", age: 30)
do {
    let jsonData = try JSONEncoder().encode(myStruct)
    print(String(data: jsonData, encoding: .utf8)!)
} catch {
    print("Error: \(error)")
}

위의 예제에서는 MyStruct를 JSON으로 직렬화하여 출력합니다.

데이터 역직렬화

JSON 데이터를 데이터 모델로 역직렬화하기 위해서는 JSONDecoder를 사용합니다.

let jsonString = """
    {
        "name": "Jane",
        "age": 25
    }
"""
do {
    let jsonData = jsonString.data(using: .utf8)!
    let decodedData = try JSONDecoder().decode(MyStruct.self, from: jsonData)
    print(decodedData)
} catch {
    print("Error: \(error)")
}

위의 예제에서는 JSON 문자열을 MyStruct 타입으로 역직렬화하여 출력합니다.

Codable 프로토콜을 이용하여 데이터 모델을 JSON으로 직렬화하고 역직렬화하는 방법에 대해 알아보았습니다. Codable을 사용하면 데이터 모델과 JSON 사이의 변환 작업을 간단하게 처리할 수 있으며, 네트워크 통신 등에서 유용하게 활용할 수 있습니다.

마지막으로 Codable 프로토콜의 자세한 사항은 공식 문서를 참고하세요.