[swift] 구조체와 열거형의 Codable 프로토콜 적용 방법

Swift에서는 Codable 프로토콜을 사용하여 데이터 모델을 JSON 또는 다른 형식으로 쉽게 인코딩(decoding)하고 디코딩(decoding)할 수 있습니다. 이번 포스트에서는 구조체와 열거형에 Codable 프로토콜을 적용하는 방법에 대해 알아보겠습니다.

구조체에 Codable 프로토콜 적용하기

구조체에 Codable 프로토콜을 적용하려면 구조체 내의 각 속성이 Codable을 준수해야 합니다. 즉, 각 속성이 String, Int, Double, Date 또는 다른 Codable을 준수하는 타입이어야 합니다.

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

위의 예제에서는 Person 구조체에 Codable 프로토콜을 준수하도록 선언하였습니다. 모든 속성인 name, age, address는 Codable을 준수하는 타입이므로, 이 구조체는 Codable을 준수합니다.

열거형에 Codable 프로토콜 적용하기

열거형에 Codable 프로토콜을 적용하려면 각 case가 Codable을 준수해야 합니다.

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

위의 예제에서는 CompassDirection 열거형에 Codable 프로토콜을 적용하였습니다. 이 열거형은 String raw 값을 가지므로, Codable 프로토콜을 준수하는 것으로 충분합니다.

Codable 프로토콜을 사용한 인코딩과 디코딩

이제 Codable 프로토콜을 준수하는 구조체와 열거형을 사용하여 JSON 데이터로 인코딩하고 디코딩해보겠습니다.

JSON 인코딩

let person = Person(name: "John", age: 30, address: "123 Street")
let jsonEncoder = JSONEncoder()
if let jsonData = try? jsonEncoder.encode(person) {
    if let jsonString = String(data: jsonData, encoding: .utf8) {
        print(jsonString)
    }
}

JSON 디코딩

let jsonString = "{\"name\":\"John\",\"age\":30,\"address\":\"123 Street\"}"
let jsonData = jsonString.data(using: .utf8)!
let jsonDecoder = JSONDecoder()
if let decodedPerson = try? jsonDecoder.decode(Person.self, from: jsonData) {
    print(decodedPerson)
}

위의 예제에서는 JSONEncoder 및 JSONDecoder를 사용하여 Codable 프로토콜을 준수하는 데이터 모델을 JSON으로 인코딩하고 디코딩하는 방법을 보여주고 있습니다.

이렇게 Codable 프로토콜을 사용하면 구조체와 열거형을 간편하게 다른 형식으로 변환할 수 있으며, 네트워크 요청과 응답, 파일 저장 등의 다양한 상황에서 유용하게 활용할 수 있습니다.

참조: Swift Codable 공식 문서

이상으로 Codable 프로토콜을 구조체와 열거형에 적용하는 방법에 대해 알아보았습니다. Codable을 통해 데이터 모델을 쉽게 인코딩하고 디코딩함으로써 Swift 애플리케이션 개발이 훨씬 효율적이고 간편해집니다.