SwiftUI
Hashable, Codable 뭐여?
밤새는 탐험가89
2025. 6. 4. 22:11
struct Landmark: Hashable, Codable {
var id: Int
var name: String
var park: String
var state: String
var description: String
}
🔹 Hashable
Hashable 프로토콜은 객체를 고유하게 식별할 수 있도록 해주는 역할
✅ 언제 쓰이나요?
- Set 또는 Dictionary의 key로 사용될 때
- UICollectionViewDiffableDataSource나 UITableViewDiffableDataSource의 ItemIdentifierType으로 사용될 때
let a = Landmark(id: 1, name: "A", park: "", state: "", description: "")
let b = Landmark(id: 1, name: "A", park: "", state: "", description: "")
print(a == b) // true, Hashable 덕분에 비교 가능
let set: Set = [a, b]
print(set.count) // 1, 중복 제거됨
🔹 Codable
Codable은 Swift의 Encodable과 Decodable을 합친 프로토콜
즉, 데이터를 JSON으로 변환하거나(JSON 인코딩), JSON에서 구조체로 변환(디코딩)할 수 있게 해줍니다.
✅ 언제 쓰이나요?
- API에서 JSON을 주고받을 때
- 파일, UserDefaults 등에 저장하거나 불러올 때
// 구조체 -> JSON (Encoding)
let landmark = Landmark(id: 1, name: "A", park: "B", state: "C", description: "D")
let jsonData = try? JSONEncoder().encode(landmark)
// JSON -> 구조체 (Decoding)
if let jsonData = jsonData {
let decoded = try? JSONDecoder().decode(Landmark.self, from: jsonData)
print(decoded?.name ?? "")
}