Codable (인코딩, 디코딩이란)

Jamezz Dev·2020년 8월 26일
0

ios 프로그래밍

목록 보기
5/10

인코딩과 디코딩

인코딩

  • 정보의 형태나 형식을 표준화 ,보안, 처리 속도 향상, 저장 공간 절약 등을 위해 다른 형태나 형식으로 변환하는 처리 또는 그 처리 방식을 말한다 (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."
 }

// Tip : encoder.outputFormatting = .prettyPrinted 설정하면 들여쓰기를 통해 가독성이 좋게 출력해줍니다.

JSONDecoder

struct GroceryProduct: Codable {
    var name: String
    var points: Int
    var description: String?
}

/// 스위프트 4 버전부터 """를 통해 여러 줄 문자열을 사용할 수 있습니다.
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"
profile
💻디지털 노마드를 🚀꿈꾸는 🇯🇲자메즈 🐥개발자 입니다.

0개의 댓글