연관 배열 구조로 Key, Value가 1:1로 연결되어 있다.
Key
를 이용해 Value
를 알아낼 수 있다.
Key
Hash function
Value
Hash table
Key, Value의 1:1 매칭으로 삽입, 삭제, 검색 과정에서 모두 O(1)의 시간복잡도를 가진다.
Hash function이 복잡하다면 해시테이블의 연산 속도가 증가한다.
자바스크립트의 객체는 일반적으로 해시 테이블과 비슷한 방식으로 구현된다.
그러나 자바스크립트의 객체는 해시 테이블이라는 한 가지 자료구조만으로는 설명되지 않는 많은 특징들이 있으므로, 객체를 해시라고 부르기에는 비약이 있다.
그 이유에 대해서 알아보자
객체의 다양한 속성 타입 처리 : 자바스크립트의 객체는 단순히 Key, Value로 구성된 것 이 아닌 함수와 메서드를 포함한 다양한 속성 타입을 지원하는 복잡한 자료구조다.
충돌에 대한 처리 방식 차이 : 일반적인 해시 테이블에서는 충동 처리를 위해 연쇄적인 해시 테이블 또는 오픈 어드레싱 방식을 사용하지만 자바스크립트에서는 충돌 처리 방식이 구체적으로 명시되어 있지 않으며, 이는 속성을 다룰 때 예기치 않은 동작이 발생할 수 있는 가능성을 높인다.
따라서 자바스크립트의 객체 === 해시
보다 객체는 해시를 포함하는 개념이라고 하는 것이 맞을 것 같다.