Swift Codable - CodingKey

DEVJUN·2022년 9월 21일
0

개발일기

목록 보기
2/2
post-thumbnail

요즘 사이드 프로젝트를 하면서 정말 많은걸 배우고 있다. 오늘 다뤄볼 내용은 Codable이다. 앱을 만들다보면 네트워크 통신을 통해 서버로 부터 데이터를 받아 파싱하여 UI에 뿌려주는 작업을 해야 한다.

자바 스크립트는 타입 체크에 엄격하지 않은 언어이기에 JSON 데이터가 쉽게 디코딩 되지만 타입에 엄격한 스위프트에선 그 작업이 쉽지 않다.

하지만 스위프트 4부터 Codable이라는 프로토콜을 제공하여 이러한 JSON 디코드 작업을 쉽게 할 수 있게 하였다.

Codable은 외부 표현으로 변환(Encode)하거나 외부 표현으로 부터 변환(Decode) 할 수 있는 타입으로 Encodable & Decodable로 구성된 유니온 타입(union type)으로 정의할 수 있다.

내가 작업을 하던 부분은 카카오 장소 검색 API를 통해 사용자가 텍스트 필드에 키워드를 입력시 장소를 찾아주는 기능이었다.

검색을 원하는 질의어와 현재 사용자의 경도, 위도, 결과 페이지 번호를 파라미터로 만들어 보내면 다음과 같은 결과값을 카카오 API에서 제공한다.

그런데 키(Key)값을 보면 category_name과 같이 기존에 내가 스위프트에서 변수나 함수등을 표기하던 방식인 카멜케이스가 아닌 스네이크 케이스였다...

하지만 다음과 같은 해결방법이 있었다. 방법은 CodingKey라는 프로토콜이었다. Codable 타입은 Codingkeys라는 이름을 가진 특별한 nested(중첩) 열거형을 정의할 수 있다. 그리고 이 열거형은 CodingKey라는 프로토콜을 채택해야 한다.

JSON 데이터의 키(Key)값은 항상 String이기 때문에 rawValue 값으로 String타입을 선택했고, CodingKeys라는 열거형이 CodingKey 프로토콜을 채택했다.

RawValue 로 제공한 값은 인코딩 과 디코딩 시 key 의 이름와 속성 이름을 매핑하는 데 사용된다.

따라서 예시로 내가 받아야 하는 데이터 중 지번주소(addressName)가 있는데 이는 address_name으로 매핑되어 원할하게 값을 받을 수 있었다.

profile
🧑🏻‍💻iOS

0개의 댓글