티스토리 뷰
이번 포스트에서는 Swift에서 제공하는 Codable을 사용하여 JSON을 Encode하고 Decode하도록 하겠습니다.
Codable은 Swift 4.x부터 지원하는 Protocol입니다. 공식 문서에 따르면 Codable은
A type that can convert itself into and out of an external representation."
자기 자신을 외부 표현으로 변환(Encode)하거나 외부 표현으로부터 변환(Decode)할 수 있는 타입이라고 합니다.
즉, Codable은 Encodable과 Decodable을 합친 것인데, 각각 정의를 살펴보면 아래와 같습니다.
typealias Codable = Decodable & Encodable
Codable은 Protocol 이기 때문에 이를 채택하여 구현해주어야 합니다. 채택이 가능한 형식으로는 class, enum, struct 모두 가능합니다.
아주 간단하게 struct 하나를 정의해보도록 하겠습니다.
struct Address {
var postCode : String
var jibunAddress: String
var roadAddress : String
}
Codable은 Protocol이기 때문에 채택을 하게 되면 아래 처럼 변환이 되겠죠.
struct Address: Codable {
var postCode : String
var jibunAddress: String
var roadAddress : String
}
JSON Encoding 하기
자 그럼 이제 외부 표현 (External Representation)으로 변환해야 하는데 이 포스트에서는 JSON 타입을 다뤄보도록 하겠습니다.
방법은 간단합니다. JSONEncoder를 생성하고 Encode하면 됩니다.
let address = Address(postCode: "01234",
jibunAddress: "서울특별시 동작구 상도동",
roadAddress: "서울특별시 동작구 상도로")
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let encodedData = try? encoder.encode(address)
encode 메소드는 아래 공식 문서에서 나온 것과 같이 Data 형을 반환합니다.
위 코드에서 .prettyPrinted라는 것은 출력하게 되면 1줄로 나오게 되는데 이를 보기 좋은 형태로 만들어 주는 옵션을 말합니다.
마치 아래와 같이 말이죠.
{
"postCode" : "01234",
"jibunAddr" : "서울특별시 동작구 상도동",
"roadAddr" : "서울특별시 동작구 상도로"
}
그렇기 때문에 이 Data 형을 String으로 변환하고 utf8로 인코딩해주면 보기 좋게 문자로 JSON 형태로 만들어줄 수 있습니다.
if let jsonData = encodedData,
let jsonString = String(data: jsonData, encoding: .utf8) {
print(jsonString) // {"postCode":"01234", "jibunAddr":"~~", "roadAddr":"~~"}
}
print를 하게 되면 원하는 대로 잘 나오는 것을 알 수 있습니다.
JSON Decoding
이번에는 반대로 디코딩을 해보도록 하겠습니다. 하는 방법은 인코딩과 유사합니다.
먼저 decoder를 만들어주시고 string을 Data로 변환한 다음 Decode를 진행하면 됩니다.
let decoder = JSONDecoder()
var data = jsonString.data(using: .utf8)
decode 할 때 decode하고자 하는 구조체/클래스/Enum 타입을 지정해주면 자동으로 decode가 이루어집니다.
if let data = data, let address = try? decoder.decode(Address.self, from: data) {
print(address.postCode)// 01234
print(address.jibunAddr)// 서울특별시 동작구 상도동
print(address.roadAddr)// 서울특별시 동작구 상도로
}
바로 해당 객체로 파싱이 되고 이를 통해 간편하게 데이터에 접근할 수 있습니다.
이번 포스트에서는 Codable를 활용하여 JSON타입 데이터를 Encoding하고 Decoding하는 방법에 대해 알아보았습니다.
'프로그래밍언어 > Swift' 카테고리의 다른 글
[Swift] Delegate 패턴 사용하기 (0) | 2020.03.13 |
---|---|
Swift 클로저 (Closure) (0) | 2020.02.23 |
Swift 함수 (0) | 2020.02.23 |
Swift 메모리 안정성 (0) | 2020.02.16 |
Swift 제어문 (조건문, 반복문) (0) | 2020.02.14 |
- Total
- Today
- Yesterday
- apple
- Elliotable
- 함수형
- ios
- Rxjava
- watchos
- Apple Watch
- 안드로이드
- SwiftUI
- 스위프트
- Reactive programming
- 애플워치
- 아이폰
- CloudComputing
- XCode
- Notissu
- 알고리즘
- Kotlin
- 코틀린
- Auto Layout
- 오토레이아웃
- 상속
- Swift
- java
- retrofit
- 컬렉션
- android
- C++
- databinding
- 함수형프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |