Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

iOS 개발일지

0829 새싹 40회차 정리 - Codable 본문

SeSAC iOS 데뷔과정 2기

0829 새싹 40회차 정리 - Codable

Lia's iOS 2022. 8. 29. 20:13
iOS 앱 개발자 데뷔 과정 40회차

 

 

 

 

#1. Checklist

- Codable (Encodable & Decodable)

JSON과 같은 외부 표현과의 호환성을 위해 데이터 유형을 인코딩 및 디코딩할 수 있는 프로토콜이다.

JSON 뿐만 아니라 디스크에 데이터 저장, 네트워크 연결 등을 통한 API 통신 등의 작업에서는 데이터가 전송되는 동안 중간 형식 (intermediate format) 으로 데이터를 인코딩 및 디코딩해야 하는 경우가 많은데, Swift 표준 라이브러리에서는 Codable을 통해 데이터 인코딩 및 디코딩에 대한 표준화된 접근 방식을 제공하고 있다.

 

JSON ➡️ Struct 데이터 변환에 디코딩을 사용하고, Struct ➡️ JSON 데이터 변환에 인코딩을 사용한다.

 

 

Serialization : 직렬화 : Encoding >> 클라이언트에서 서버로 데이터 변환

DeSerialization 역직렬화 : Decoding >> 서버에서 클라이언트로 데이터 변환

 

Codable은 Decodable 프로토콜과 Encodable 프로토콜에 대한 typealias 이기 때문에, 양방향 인코딩 디코딩을 지원하지 않는 경우라면 Decodable, Encodable 프로토콜을 독립적으로 채택해서 사용할 수 있다.

 

 

- CodingKey

- enum CodingKeys

원하는 키로 모델을 생성하고 싶거나 기본적으로 제공해주는 디코딩 전략으로 원하는 형태를 얻기가 어려운 경우 커스텀 키를 생성한다.

이 때 CodingKey 프로토콜로 인코딩과 디코딩을 할 수 있는 키로 사용할 수 있다.

열거형 CodingKeys는 내부적으로 항상 생성이 되어 있기 때문에 커스텀 키가 필요할 때만 작성하면 되며, CodingKeys를 작성하게 될 경우 커스텀 키로 사용하지 않을 키도 모두 열거형 CodingKeys에 포함해야 한다.

 

- quicktype

https://quicktype.io

JSON의 키를 그대로 모델에 생성하고 싶을 때, 해당 사이트에 JSON을 입력하면 Struct 형식으로 변환해준다.

완벽하지는 않기 때문에 변환 후의 코드를 이해하고 수정하는 과정이 필요할 것 같다.

 

 

 

- DecodingStrategy: init(from decoder: Decoder) & decodeIfPresent

서버에서 받은 값을 그대로 사용하지 않고 일부 제약 조건을 추가하거나 값에 대한 변형을 하고 싶은 경우가 있을 수 있다.

또는 nil 값일 경우 대체할 문자열을 추가하고 싶을 수 있다.

디코딩을 한 이후에 로직적으로 구현해도 되지만, 디코딩을 하면서 원하는 결과를 바로 얻고 싶을 때 용이하다.

CodingKey 코드와 이어진다

 

 

 

- JSONEncoder()

- outputFormatting

json 구조에 맞게 결과를 확인하고 싶을 때는 prettyPrinted를, key를 정렬하고자 할 때는 sortedKeys를 사용한다.

 

- encodingStrategy

dateEncodingStrategy는 iso8601이 가장 기본적인 형태이며, 오른쪽처럼 formatter를 설정해서 사용할 수도 있다.