iOS 개발일지
0829 새싹 40회차 정리 - Codable 본문
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
JSON의 키를 그대로 모델에 생성하고 싶을 때, 해당 사이트에 JSON을 입력하면 Struct 형식으로 변환해준다.
완벽하지는 않기 때문에 변환 후의 코드를 이해하고 수정하는 과정이 필요할 것 같다.
- DecodingStrategy: init(from decoder: Decoder) & decodeIfPresent
서버에서 받은 값을 그대로 사용하지 않고 일부 제약 조건을 추가하거나 값에 대한 변형을 하고 싶은 경우가 있을 수 있다.
또는 nil 값일 경우 대체할 문자열을 추가하고 싶을 수 있다.
디코딩을 한 이후에 로직적으로 구현해도 되지만, 디코딩을 하면서 원하는 결과를 바로 얻고 싶을 때 용이하다.
- JSONEncoder()
- outputFormatting
json 구조에 맞게 결과를 확인하고 싶을 때는 prettyPrinted를, key를 정렬하고자 할 때는 sortedKeys를 사용한다.
- encodingStrategy
dateEncodingStrategy는 iso8601이 가장 기본적인 형태이며, 오른쪽처럼 formatter를 설정해서 사용할 수도 있다.
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
0831 새싹 42회차 정리 - MVVM 맛보기 (0) | 2022.08.31 |
---|---|
0830 새싹 41회차 정리 (0) | 2022.08.30 |
0828 새싹 8주차 마무리 (0) | 2022.08.28 |
0826 새싹 39회차 정리 (0) | 2022.08.26 |
0825 새싹 38회차 정리 - 백업/복구 (feat. UIDocumentPickerViewController) (0) | 2022.08.25 |