Codable
Codable은 Swift의 Decodable과 Encodable프로토콜을 결합한 프로토콜이다.
이들은 사용자 정의 유형에 대한 데이터 디코딩 및 저장 또는 전송될 인코딩 데이터의 표준을 제공한다.
JSON과 함께 Codable을 사용하면 데이터 개체를 반환하기 위해 코드 구문 분석에 필요한 모든 검사가 필요하지 않으며 데이터가 복잡해짐에 따라 다양한 복잡성을 처리하여 코드를 가능한 최소화하며 깔끔하게 유지한다. 이러한 코드는 읽기 쉬우며 유지관리가 가능하며 데이터가 복잡해 지면 해당 데이터를 Swift객체로 구문분석하는 코드가 많아지고 유지관리가 힘들어 진다.
예시를 들어보자.
// JSON Data:
{
"id": 1234,
"src": "//api.someHost.com/version/someImageName.jpg",
"caption": null
}
이러한 JSON DATA가 있을 경우 JSON data를 Swift의 구조체로 저장하기 위해 Codable을 사용하지 않으면
struct Photo {
let id: Int
let src: URL
let caption: String?
init?(json: [String: Any]) {
guard
let id = json[“id”] as? Int,
let srcString = json["src"] as? String,
let src = URL(string: srcString)
else { return nil }
let caption = json["caption"] as? String
self.id = id
self.src = src
self.caption = caption
}
}
총 19줄의 코드가 필요하다 하지만 Codable 프로토콜을 사용하면
struct Photo: Decodable {
let id: Int
let src: URL
let caption: String?
}
5줄의 코드로 단순화 된다.
Codable은 JSON키와 이름이 같은 객체가 있을경우 JSON의 데이터는 키가 같은 Swift객체 구조체의 상수로 매핑된다.
JSON키를 열거형으로 분리하고 대부분의 "if - let", "guard - else" 문의 필요성을 제거할 수 있다.