일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CLLocationManagerDelegate
- SwiftUI Boolean 값
- WeatherManager
- CoreLocation
- weatherKit
- font book
- RunningTimer
- addannotation
- 한국어 개인정보처리방침
- 단일 책임원칙
- Required Reason API
- Xcode
- MKMapItem
- 러닝타이머
- dispatchsource
- Protocol
- 영문 개인정보처리방침
- 러닝기록앱
- 서체관리자
- Startign Assignments
- xcode로 날씨앱 만들기
- weak var
- UIAlertAction
- swift
- UICollectionViewFlowLayout
- AnyObject
- App Store Connect
- MKMapViewDelegate
- 클로저의 캡슐화
- Timer
- Today
- Total
VesselWheel
Swift에서의 네트워크 통신 이해하기(.feat Decodabe, Encodable, Codable)(2/2) 본문
Swift에서의 네트워크 통신 이해하기(.feat Decodabe, Encodable, Codable)(2/2)
JasonYang 2024. 1. 4. 18:00Decodabe, Encodable, Codable 이해하기
Decodable 프로토콜
Decodable 프로토콜은 데이터를 객체로 디코딩할 때 사용됩니다. 즉, 외부 데이터(JSON)를 Swift의 데이터 모델로 변환하는데에 필요한 프로토콜입니다.
**Decodable**을 준수하는 객체는 외부 데이터를 해석하고 그 데이터를 객체의 프로퍼티로 매핑할 수 있어야 합니다.
이곳에서 CodingKeys 는 디코딩 할 때, 프로퍼티들에 대한 매핑을 제공하는 역할을 합니다. 아래 예시에서는, id라는 프로퍼티의 디코딩 키를 key로, name 프로퍼티의 디코딩 키를 프로퍼티 이름과 동일하게 지정한 예시입니다.
struct User: Decodable {
let id: Int
let name: String
// 다른 프로퍼티들...
public enum CodingKeys: String, CodingKey {
case id = "key"
case name
}
// Decoding - 디코딩
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(Int.self, forKey: .id)
name = try container.decode(String.self, forKey: .name)
}
}
Encodable 프로토콜
Encodable 프로토콜은 객체를 데이터로 인코딩할 때 사용됩니다. 즉, Swift의 데이터 모델을 외부 데이터(JSON)로 변환하는데에 필요한 프로토콜입니다.
**Encodable**을 준수하는 객체는 객체의 프로퍼티를 외부 데이터 형식(JSON)으로 인코딩할 수 있어야 합니다.
이곳에서 CodingKeys 는 인코딩 할 때, 프로퍼티들에 대한 매핑을 제공하는 역할을 합니다. 아래 예시에서는, id라는 프로퍼티의 인코딩 키를 key로, name 프로퍼티의 인코딩 키를 프로퍼티 이름과 동일하게 지정한 예시입니다.
struct User: Encodable {
let id: Int
let name: String
// 다른 프로퍼티들...
public enum CodingKeys: String, CodingKey {
case id = "key"
case name
}
// Encodable 프로토콜을 준수하기 위한 커스텀 인코딩 로직
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: .id)
try container.encode(name, forKey: .name)
// 다른 프로퍼티들도 인코딩 가능
}
}
Codable 프로토콜
**Codable** 프로토콜은 두 가지 하위 프로토콜, **Encodable**과 Decodable 을 결합한 것입니다.
public typealias Codable = Decodable & Encodable
외부 데이터(JSON)를 Swift의 데이터 모델로 변환, Swift의 데이터 모델을 외부 데이터(JSON)로 변환을 모두 수행하여야 할 때에, Codable 프로토콜을 사용할 수 있습니다.
이곳에서 CodingKeys 는 인코딩/디코딩 할 때, 프로퍼티들에 대한 매핑을 제공하는 역할을 합니다. 아래 예시에서는, id라는 프로퍼티의 인/디코딩 키를 key로, name 프로퍼티의 인/디코딩 키를 프로퍼티 이름과 동일하게 지정한 예시입니다.
struct User: Codable {
let id: Int
let name: String
// 다른 프로퍼티들...
public enum CodingKeys: String, CodingKey {
case id = "key"
case name
}
// Encodable 프로토콜을 준수하기 위한 커스텀 인코딩 로직
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: .id)
try container.encode(name, forKey: .name)
// 다른 프로퍼티들도 인코딩 가능
}
// Decoding - 디코딩
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(Int.self, forKey: .id)
name = try container.decode(String.self, forKey: .name)
}
}
'Xcode Study' 카테고리의 다른 글
xcode 협업을 위한 storyboard 분할하기(feat. storyboard reference) (0) | 2024.01.16 |
---|---|
UserDefaults를 이용한 데이터 관리와 ToDo 앱 만들기 (0) | 2024.01.11 |
Swift에서의 네트워크 통신 이해하기(.feat URL Session)(1/2) (0) | 2024.01.04 |
Code로 쓰는 UI와 StroyBoard 로 쓰는 UI의 장점과 단점(from. 권영호 튜터) (0) | 2024.01.04 |
클로저로 만드는 타이머 매서드(feat. 비동기화) (1) | 2024.01.04 |