[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 프로토콜을 활용하면 이러한 과정을 간단하게 처리할 수 있으며, 네트워크 통신이나 데이터 저장소와의 상호 작용에 유용하게 활용할 수 있습니다.