Codable

이원희·2020년 12월 22일
1

 🐧 Swift

목록 보기
6/32
post-thumbnail

오늘은 Codable에 대해 알아보려 한다.
프로젝트를 진행하며 JSON을 파싱할때 Codable을 사용했다.

Codable은?

Swift4에서 등장했다.
공식문서부터 알아보자!

Declaration을 보면 DecodableEncodable 프로토콜의 조합인걸 확인할 수 있다.

Encodable?

Encodable은 data를 Encoder에서 변환해주려는 프로토콜로 바꿔주는 것이다.

Decodable?

Decodable은 data를 원하는 모델로 Decode 해주는 것이다.

내 경우에 대입해 보자면!
Encodable은 모델을 JSON으로 인코드한다.
DecodableJSON을 모델로 디코드한다.

사용

Codablestruct, enum, class 전부 채택 가능하다.


이런 식을 채택할 수 있다.



그렇다면 위와 같이 User 안에 Gender라는 enum을 추가하고 Gender를 갖는 프로퍼티를 추가하면 어떻게 될까?


다음과 같은 오류를 마주할 수 있다.
우리가 추가한 GenderDecodable을 준수하지 않아서 생기는 문제이다.


이 문제를 해결하기 위해 위와 같은 방식으로 준수하도록 바꾸면 된다.

이처럼 Codable을 이용하기 위해서는 중첩 Type에도 Codable이 필요하다.
중첩 Type이 Codable을 준수하지 않으면 해당 프로퍼티를 인코딩 혹은 디코딩이 불가하다.


enum CodingKeys

위의 코드에서 enum CodingKeys는 무엇일까?
enum CodingKeys가 채택하고 있는 CodingKeyJSON 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에 대해서 알아봤다.
간단하게 끝난거 같지만... 간단했다...?ㅋㅋㅋ
그럼 이만...!👋

0개의 댓글