본문 바로가기

iOS 관련 공부/SwiftUI

Equatable, Hashable, Identifiable

함 정리 하고 넘어갈라고욤

 

 

Equatable - 같은지 비교할 수 있어야 함

두 값이 같은지 판단할 수 있게 해주는 프로토콜

== 연산자가 자동 생성되거나, 직접 정의할 수 있다.

struct Person: Equatable {
    let name: String
    let age: Int
}

let a = Person(name: "Alice", age: 20)
let b = Person(name: "Bob", age: 20)
print(a == b) // false

Equatable 이 없다면 == 비교 자체가 불가능

 

 

Hashable - 고유값을 만들어서 저장하거나 찾을 수 있어야 함

Dictionary 나 Set 같은 곳에 객체를 쓸 수 있게 하려면 고유한 해시값이 필요하다.

SwiftUI에서 \.self 를 ID로 쓰려면 Hashable 이 필수다.

struct Person: Hashable {
    let name: String
    let age: Int
}

let people: Set<Person> = [
    Person(name: "Alice", age: 20),
    Person(name: "Bob", age: 25)
]

참고: Swift에서 Hashable 을 채택하면 Equatable 도 자동 포함된다. 그래서 == 도 같이 사용 가능하다.

 

 

Identifiable - 이 객체의 고유 ID는 이거야

SwiftUI의 List, ForEach 등에서 각 객체를 식별할 수 있도록 해준다.

반드시 id 라는 프로퍼티가 필요하다.

struct Person: Identifiable {
    let id: UUID
    let name: String
}

let people = [
    Person(id: UUID(), name: "Alice"),
    Person(id: UUID(), name: "Bob")
]

List(people) { person in
    Text(person.name)
}

id 는 UUID, String, Int 등 아무거나 가능하지만 유일해야 한다.

Identifiable 을 채택하면 id: \.id 를 생략할 수 있다.

 

프로토콜 역할 사용처
Equatable 두 객체가 같은지 비교 == , 리스트에서 중복 제거 등
Hashable 고유한 해시값 생성 Set, Dictionary, \.self 사용 시
Identifiable 객체를 식별할 수 있게 해줌 SwiftUI의 List, ForEach 등

'iOS 관련 공부 > SwiftUI' 카테고리의 다른 글

키 경로 KeyPath (\.)  (0) 2025.04.24
TextEditor  (0) 2025.04.22
배경색 넣기 문제..  (1) 2025.04.21
네비게이션 바 background  (0) 2025.04.21
SwiftData 기본적인 내용..이라고 해야할까..?  (0) 2025.04.18