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 또는 Dictionarykey로 사용될 때
  • 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 ?? "")
}