[swift] 구조체와 열거형의 JSON 인코딩과 디코딩 방법

서론

스위프트에서는 구조체와 열거형을 사용하여 데이터를 모델링하는 경우가 많습니다. 이러한 구조체와 열거형을 JSON 형식으로 인코딩하거나 디코딩하는 방법을 다룹니다. JSON은 속성-값 쌍이나 배열 또는 다른 더 복잡한 구조를 표현하기 위한 경량의 데이터 교환 형식으로 널리 사용됩니다.

구조체와 열거형의 Codable 프로토콜 준수

스위프트 4에서는 Codable 프로토콜을 이용하여 데이터 모델을 JSON으로 인코딩하고 디코딩할 수 있습니다. 구조체와 열거형이 Codable 프로토콜을 준수하도록 만들면 JSON 인코딩 및 디코딩이 쉬워집니다.

구조체의 JSON 인코딩 및 디코딩

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

let person = Person(name: "John", age: 30)

// 인코딩
let jsonEncoder = JSONEncoder()
if let jsonData = try? jsonEncoder.encode(person),
   let jsonString = String(data: jsonData, encoding: .utf8) {
    print(jsonString)
}

// 디코딩
let json = """
{
    "name": "Alice",
    "age": 25
}
"""
if let jsonData = json.data(using: .utf8),
   let decodedPerson = try? JSONDecoder().decode(Person.self, from: jsonData) {
    print(decodedPerson.name, decodedPerson.age)
}

열거형의 JSON 인코딩 및 디코딩

enum Transport: String, Codable {
    case car
    case bus
    case bike
}

let transport = Transport.car

// 인코딩
let jsonEncoder = JSONEncoder()
if let jsonData = try? jsonEncoder.encode(transport),
   let jsonString = String(data: jsonData, encoding: .utf8) {
    print(jsonString)
}

// 디코딩
let json = "\"bus\""
if let jsonData = json.data(using: .utf8),
   let decodedTransport = try? JSONDecoder().decode(Transport.self, from: jsonData) {
    print(decodedTransport)
}

결론

스위프트에서는 Codable 프로토콜을 준수한 구조체와 열거형을 쉽게 JSON으로 인코딩하고 디코딩할 수 있습니다. 이를 통해 네트워크 통신이나 데이터 저장소와의 상호 작용에서 편리하게 JSON 데이터와 스위프트 데이터 모델 간의 변환을 수행할 수 있습니다.

참고 자료


이 포스트에서는 스위프트의 구조체와 열거형을 JSON으로 인코딩하고 디코딩하는 방법을 살펴보았습니다. Codable 프로토콜을 활용하면 이러한 과정을 간단하게 처리할 수 있으며, 네트워크 통신이나 데이터 저장소와의 상호 작용에 유용하게 활용할 수 있습니다.