본문 바로가기

Swift

[Swift] Codable, JSONEncoder, JSONDecoder

안녕하세요 Wody 입니다!

 

이번 포스팅에서는 Swift에서 JSON 데이터 유형을 다루는 방법 중 하나인

Codable, JSONEncoder, JSONDecoder를 알아보겠습니다.

 

3가지를 알아보기 위한 공식 문서

Apple Developer - Archives and Serialization

 

Codable

CodableDecodableEncodable을 합친 typealias입니다.

그래서 Codable을 알기 위해선 Encodable & Decodable을 알아야 합니다.

 

EncodableDecodable은 JSON과 같은 데이터 유형을 인코딩, 디코딩 가능하게 만드는 프로토콜입니다.

 

자세한 사용법은 공식문서에도 친절히 나와있습니다.

 

기본적으로 Swift에선 인코딩과 디코딩을 구분하고 있기 때문에 Codable을 채택한다면 두 가지 기능을 모두 이용할 수 있습니다.

(반대로 디코드 기능만 필요하다면 Codable를 채택하는게 아니라 Decodable을 채택해야겠죠?)

 

만약 JSON 데이터 형식이 

{
"nama" : "wody",
"age" : 20
}

이런식으로 되어 있다면 우리는 이 JSON 형식을 읽고, 만들 타입을 구현해야 합니다.

 

struct Person: Codable {  
    var name: String
    var age: Int
}
 
 
 
 

 

인코딩을 한다면?

let wody = Person(name: "wody", age: 4)

let encodingJsonData = try? JSONEncoder().encode(wody)

진짜 간단합니다.

 

Encodable을 채택한 타입의 프로퍼티를 만든 후, JSONEncoder()의 encode 메소드를 이용하면 

 

JSON 데이터 형식의 프로퍼티인 encodingJsonData를 만들 수 있습니다.

 

 

디코딩을 한다면?

let decodingData = try? JSONDecoder().decode(Person.self, from: encodingJsonData)

우리가 만들었던 JSON 데이터 encodingJsonData를 활용해서 Decode 타입인 Person 타입으로 디코딩 해봤습니다!

 

생각보다 간단한 Codable과 Encodable, Decodable이었습니다!

'Swift' 카테고리의 다른 글

[Swift] URLSession  (0) 2021.09.06
[Swift] ARC와 순환 참조  (0) 2021.09.02
[Swift] Unit Test, TDD  (0) 2021.08.30
[Swift] 정규표현식  (0) 2021.08.23
[Swift] String 문자열 대소문자 변경하기 / uppercased(), lowercased()  (0) 2021.08.23