오늘은 Codable
에 대해 알아보려 한다.
프로젝트를 진행하며 JSON
을 파싱할때 Codable
을 사용했다.
Swift4에서 등장했다.
공식문서부터 알아보자!
Declaration
을 보면 Decodable
과 Encodable
프로토콜의 조합인걸 확인할 수 있다.
Encodable
은 data를 Encoder
에서 변환해주려는 프로토콜로 바꿔주는 것이다.
Decodable
은 data를 원하는 모델로 Decode
해주는 것이다.
내 경우에 대입해 보자면!
Encodable
은 모델을JSON
으로 인코드한다.
Decodable
은JSON
을 모델로 디코드한다.
Codable
은 struct
, enum
, class
전부 채택 가능하다.
이런 식을 채택할 수 있다.
그렇다면 위와 같이 User
안에 Gender
라는 enum
을 추가하고 Gender
를 갖는 프로퍼티를 추가하면 어떻게 될까?
다음과 같은 오류를 마주할 수 있다.
우리가 추가한 Gender
가 Decodable
을 준수하지 않아서 생기는 문제이다.
이 문제를 해결하기 위해 위와 같은 방식으로 준수하도록 바꾸면 된다.
이처럼 Codable
을 이용하기 위해서는 중첩 Type에도 Codable
이 필요하다.
중첩 Type이 Codable
을 준수하지 않으면 해당 프로퍼티를 인코딩 혹은 디코딩이 불가하다.
위의 코드에서 enum CodingKeys
는 무엇일까?
enum CodingKeys
가 채택하고 있는 CodingKey
는 JSON
key값과 내가 지정한 Type의 프로퍼티와 다를 경우 사용하는 프로토콜이다.
위의 코드로 보면 실제 JSON
에서는 사용자의 핸드폰 번호가 phone_number
라는 key의 value로 들어있다.
우리는 사용자의 핸드폰 번호를 phoneNumber
라는 프로퍼티로 지정하고 싶어서 enum CodingKeys: String, CodingKey
를 통해 알려준다.
아래 코드는 XCode 에셋에 있는 JSON
파일을 Codable
을 채택한 KoreaItem
Type의 배열로 변환해주는 코드이다.
우선 JSON Decoder
를 하나 생성한다.
내 프로젝트에서 JSON data
는 Asset에 넣었으므로 NSDataAsset
을 통해 가지고 온다.
앞서 생성한 JSON Decoder
를 통해 디코딩한다.
생각보다 간단하다!
오늘은 Codable
에 대해서 알아봤다.
간단하게 끝난거 같지만... 간단했다...?ㅋㅋㅋ
그럼 이만...!👋