티스토리 뷰

TIL

[TIL] 2022 / 08 / 29

희철 2022. 8. 29. 14:37

Codable

 

 

Decodable과 Encodable을 함께 묶어서 typealias를 이용해 선언한 프로토콜.

 

 

데이터가 전송되는 동안 intermediate format으로 데이터를 인코딩&디코딩해야 할 때 사용.

 

Codable이 등장하기 전엔 JSONSerialization이 사용됐음.

-> JSON Value중 단일한 값만 가져오는 것이라면 JSONSerialization이 더 빠르지만, 그 외에는 Codable이 더 빠름.

 

SwiftyJson라이브러리는 JSONSerialization을 기반으로 만들어져있고, 속도가 가장 오래걸림

-> 하지만 딕셔너리 형태로 가져온다는 장점이 있음.

 

 

Decodable

 

 

원하는 모델로 데이터를 디코딩할 수 있는 프로토콜

 

구조체, 클래스, 열거형 모두에서 사용 가능.

 

모든 Key를 디코딩하지 않아도됨.

-> 필요한 값만 받아와도 괜찮

 

다양한 케이스가 있음.

 

1. JSON키와 동일하게 구조체를 구성해서 그냥 가져오는 경우

 

2. 키 값이 같지 않은 경우엔 모델을 옵셔널로 선언해서 처리가능

 

3. DecodingStrategy: SnakeCase

 

디코딩전략 중 SnakeCase는 _뒤에 오는 단어를 대문자로 변경해줌.

 

 

4. DecodingStrategy: CodingKey

 

원하는 키로 설정하고 싶거나 기본적인 디코딩 전략으로 해결 불가능한 경우 커스텀하게 키를 생성할 수 있음.

 

내부적으로 CodingKey는 항상 생성이 되어있음.

 

만약 CodingKey를 사용한다면 커스텀키가 아닌 기본 키로 사용하더라도 같이 작성해줘야함.

 

 

5. DecodingStrategy: init(from decoder: Decoder) & decodeIfPresent

 

서버에서 받은 값을 그대로 사용하지 않고 조건을 추가하거나, 값을 변경하고 싶을때 사용

 

또한 null로 데이터가 오는 경우 대체할 문자열을 정해줄 수 있음.

 

 

 

Encodable

 

 

원하는 모델을 외부로 전달하기 위해 JSON 등의 형태로 전환하는 프로토콜

 

디코더블과 특징은 전부 같음.

 

 

1. 가지고 있는 객체를 JSON으로 인코딩

 

 

 

2. EncodingStrategy: outputFormatting

 

이름에서 유추할 수 있듯이 포맷을 만지는 것.

 

예쁘게 출력되게 하거나 키를 정렬하는 등의 작업을 할 수 있음.

 

3. EncodingStrategy: DateFormat

 

Date값을 인코딩하고 출력해보면 아래처럼 이상하게 나옴.

이 값은 1970년 1월 1일부터 몇초가 지났는지 나타냄.

 

시간처럼 나타내고 싶을땐 iso8601사용

 

기존에 날짜를 dateFormatter를 이용했던 것처럼 여기서도 사용 가능.

 

 

4. EncodingStrategy: encode(to encoder: Encoder)

 

인코딩된 데이터는 내부 컨테이너로 저장이 되어있음.

-> 데이터를 가져오기 위해서는 컨테이너로 먼저 접근해야함.

 

또한 디코더블처럼 원하는 값으로 리턴받을 수 있음.

 

 

 

'TIL' 카테고리의 다른 글

[TIL] 2022 / 09 / 02 (GCD)  (0) 2022.09.02
[TIL] 2022 / 08 / 31  (0) 2022.08.31
[TIL] 2022 / 08 / 27  (0) 2022.08.28
[TIL] 2022 / 08 / 25  (0) 2022.08.26
[TIL] 2022 / 08 / 24  (0) 2022.08.25
댓글
최근에 올라온 글
Total
Today
Yesterday