본문 바로가기
Category/iOS

Hashable - 객체가 고유한 해시 값을 가질 수 있도록 하는 프로토콜

by Corinee 2024. 10. 28.
728x90
반응형

Hashable은 Swift에서 특정 객체가 고유하게 식별될 수 있도록 해주는 프로토콜입니다. 쉽게 말해, 객체를 숫자로 변환해서 다른 객체들과 비교할 수 있게 해줍니다. 이 숫자를 해시값이라고 부르는데, 이 해시값을 이용하면 객체를 빠르게 찾거나 비교할 수 있어요.

Hashable을 왜 사용할까요?

  • Set이나 Dictionary 같은 자료 구조에서는 중복을 허용하지 않거나 키를 사용해 값을 저장하는데, 이를 위해 객체가 고유해야 하고, 해시값이 필요합니다.
  • 해시값은 같은 객체가 중복되지 않도록 하거나 빠르게 검색하기 위한 일종의 숫자 코드입니다.

예를 들어, 친구 목록에서 중복된 이름을 제거하고 싶다면?

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

let friend1 = Friend(name: "Alice", age: 25)
let friend2 = Friend(name: "Bob", age: 22)
let friend3 = Friend(name: "Alice", age: 25)  // 같은 친구

var friendsSet: Set<Friend> = [friend1, friend2, friend3]
print(friendsSet.count)  // 결과는 2, 중복된 Alice는 한 번만 들어감
  • 위에서 Friend는 Hashable을 구현했고, Set에 들어갔어요.
  • 같은 이름과 나이를 가진 친구는 중복되지 않고 한 번만 들어갑니다.

해시값이란?

해시값은 객체를 고유하게 구분하는 숫자 코드입니다. 두 객체가 같다면 해시값도 같아야 하고, 다르다면 해시값도 다르게 만들어야 합니다.

기본적인 설명을 요약하면:

  • Hashable을 사용하면 객체가 고유한 ID를 가지게 되고, 이를 통해 빠른 검색중복 제거가 가능합니다.
  • Swift의 기본 자료형(예: Int, String)은 이미 Hashable을 지원하고 있어서 바로 쓸 수 있어요.

즉, Hashable은 객체를 구분하기 위한 특별한 숫자 코드(해시값)를 부여해서, 이를 통해 자료구조에서 중복을 방지하거나 빠르게 검색하는 데 사용되는 프로토콜입니다.