intro) 도대체 Hashable이 뭔데?

드디어 그 궁금증을 해결해봅시다!

공식문서를 읽다보면 아래와 같은 문장이 나온다. 집합 (set) 에 저장하기 위해 타입은 반드시 hashable여야 합니다. 딕셔너리 Key타입은 집합의 값 타입과 같이 반드시 Hashable프로토콜을 준수해야 합니다.

그리고 위와 같은 내용 때문에 딕셔너리의 Key값과 집합의 요소들은 Any타입을 가질 수 없다.

도대체 Hashable이 무엇일까?

1. HashTable

일단 HashAble을 알기 위해서는 hash의 동작을 이해해야 되고, hash 동작을 이해하기 위해서는, HashTable의 개념을 알고 있어야 한다! 하나하나씩 살펴보자곰

우리가 잘 알고있는 딕셔너리는 특정 key를 던져주면 그 키에 해당하는 value값을 내보내는 형태이다! 딕셔너리가 해쉬테이블로 구현되어 있기 때문에 해시테이블도 key-value값을 가짐

but. 해쉬테이블은 내부적으로 배열의 형태를 가지고 있음

1-1. Hash 함수 ⭐️

자! 해쉬테이블이 내부적으로 배열의 형태를 띈다! 근데 우리는 key값을 통해 value값을 얻고 싶다!

but. 배열에 접근하려면 index값이 필요하다! → 여기까지 생각을 했으면 당신은 진짜 개천재…

그럼 우리가 필요한 건 key값에 상응하는 index값이 있으면 되겠네?

Hash 함수가 바로 Key에 대한 산술 연산을 이용하여 해시 주소값(해시 테이블의 index)을 만들어 준다!

(난 이거 이해할 때 쫌 짜릿했는데.. 열어분은 어떠신가욥?)

Untitled

1-2. 간단한 HashTable 만들기

i) 해쉬테이블 만들기