인코딩과 디코딩
인코딩
- 정보의 형태나 형식을 표준화 ,보안, 처리 속도 향상, 저장 공간 절약 등을 위해 다른 형태나 형식으로 변환하는 처리 또는 그 처리 방식을 말한다 (ex: 위키백과 -> 부호화)
디코딩
- 인코딩의 반대 작업을 수행하는 것을 뜻하며 이를 수행하는 장치로 인코더라 부르며 회로, 소프트웨어 알고리즘을 뜻한다
Codable
- 스위프트 4 버전에서는 인스턴스를 다른 데이터 형태로 변환하고 그 반대의 역할을 수행하는 방법을 제공한다. 인스턴스를 다른 형태로 변환할 수 있는 기능 Encodable 프로토콜로 표현, 그 반대의 역할하는 기능을 Decodable 로 표현하였다 그 둘을 합한 타입을 codable로 정의하였다 .
typealias Codable = Decodable&Encodable
- codable은 스위프트 4에서 처음 소개한 프로토콜 codable 프로토콜을 이용해 편리하게 인코딩 및 디코딩 할 수 있다.
JSONEncoder / JSONDecoder
JSONEncoder
struct GroceryProduct: Codable {
var name: String
var points: Int
var description: String?
}
let pear = GroceryProduct(name: "Pear", points: 250, description: "A ripe pear.")
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
do {
let data = try encoder.encode(pear)
print(String(data: data, encoding: .utf8)!)
} catch {
print(error)
}
{
"name" : "Pear",
"points" : 250,
"description" : "A ripe pear."
}
JSONDecoder
struct GroceryProduct: Codable {
var name: String
var points: Int
var description: String?
}
let json = """
{
"name": "Durian",
"points": 600,
"description": "A fruit with a distinctive scent."
}
""".data(using: .utf8)!
let decoder = JSONDecoder()
do {
let product = try decoder.decode(GroceryProduct.self, from: json)
print(product.name)
} catch {
print(error)
}
"Durian"