Hashable , 해쉬값이란?

CodeCat·2024년 9월 11일
post-thumbnail

안녕하세요 !

이번에는 Hashable 이란 주제로 포스팅을 해볼 생각입니다 !

해시값(Hash Value)이란?

해시값은 데이터를 고정된 크기의 값으로 변환한 것이며(Swift에서 해시값은 64비트 정수로 표현되용)이 변환 과정은 해시 함수를 통해 이루어지며, 해시 함수는 입력 데이터의 크기와 상관없이 항상 동일한 크기의 출력을 생성합니다

해시값의 특징:

  1. 동일한 입력은 항상 동일한 해시값을 생성한다
  2. 입력이 조금만 달라져도 완전히 다른 해시값으로 생성된다
  3. 해시값으로부터 원본 데이터를 유추하는 것은 거의 불가능하다
let greeting = "Hello, Swift!"
print(greeting.hashValue) // 예: -2848629862486

여기서 주의할 점은 해시값이 프로그램을 실행할 때마다 달라질 수 있다는 것입니다

Hashable이란?

Hashable은 Swift의 프로토콜 중 하나로, 해당 타입의 인스턴스가 해시값을 가질 수 있음을 의미합니다 (Swift의 기본 타입들(String, Int, Double 등)은 모두 Hashable 프로토콜을 준수합니다)

Hashable 프로토콜을 준수하는 타입은 다음 두 가지 요구사항을 만족해야 합니다:

  1. hashValue 프로퍼티를 가져야 한다
  2. hash(into:) 메서드를 구현해야 한다

또한, Hashable은 Equatable 프로토콜을 상속받기 때문에, == 연산자도 구현해야 합니다

Hashable의 사용

Hashable은 주로 Set과 Dictionary에서 사용되며 Set의 요소나 Dictionary의 키는 반드시 Hashable해야 합니다

예를 들어, 사용자 정의 구조체를 Set의 요소로 사용하고 싶다면 다음과 같이 Hashable을 준수하도록 만들 수 있습니다:

struct User: Hashable {
    let id: Int
    let name: String
}

var userSet = Set<User>()
userSet.insert(User(id: 1, name: "Alice"))
userSet.insert(User(id: 2, name: "Bob"))

해시 충돌

서로 다른 두 값이 같은 해시값을 가지는 경우를 해시 충돌이라고 하는데 해시 함수의 특성상 피할 수 없는 현상입니다

Hashable과 해시값은 Swift에서 효율적인 데이터 구조를 구현하는 데 중요한 역할을 하며 특히 대량의 데이터를 빠르게 검색하거나 중복을 제거해야 할 때 유용하게 사용되요!
이상으로 포스팅 마무리 하겠습니다.

.
.
.

감사합니다.

profile
코드와 고양이의 만남

0개의 댓글