Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 딕셔너리(사전) 데이터 구조 완벽 이해하기


컴퓨터 과학에서 연관 배열(associative array), 맵(map), 심볼 테이블(symbol table), 딕셔너리(dictionary)는 (키, 값) 쌍의 집합으로 구성된 추상 자료형입니다. 이때 각 키는 컬렉션 안에서 최대 한 번만 나타날 수 있습니다. 참고로 딕셔너리는 흔히 '맵'이라고도 불립니다.

딕셔너리 문제(dictionary problem)는 컴퓨터 과학의 고전적인 주제 중 하나로, 데이터 집합을 '검색', '삭제', '삽입' 연산 과정에서 효율적으로 관리할 수 있는 자료구조를 설계하는 과제를 의미합니다. 딕셔너리는 다양한 방식으로 구현할 수 있으며, 대표적인 구현 방법은 다음과 같습니다.

  • 해시 테이블(Hash Table) 기반 구현
  • 트리(Tree) 기반 구현 (자가 균형 트리 및 비균형 트리)
  • 리스트(List) 기반 구현

딕셔너리를 사용해야 하는 경우

딕셔너리는 만능 해결책(silver bullet)이 아니므로 모든 상황에서 무분별하게 사용해서는 안 됩니다. 다양한 시나리오에서 유용하지만, 문제 해결을 위해 딕셔너리를 도입하기 전에는 아래 사항을 반드시 고려해야 합니다.

  • 데이터 삽입은 일반적으로 느린 편이지만, 읽기(조회) 속도는 트리보다 빠릅니다.
  • 빠른 조회가 필요한 경우에 적합합니다. 예를 들어 데이터 캐싱, 데이터베이스 인덱싱, 심볼 테이블 등에 널리 활용됩니다.
  • 요소들의 순서가 중요하지 않은 경우에 적합합니다.
  • 모든 요소의 키가 고유(unique)한 경우에 적합합니다.

구현할 핵심 메서드

딕셔너리는 일반적으로 잘 정의된 API를 갖추고 있습니다. 여기서는 아래와 같이 가장 기본적인 딕셔너리 API를 구현해 보겠습니다.

  • get(): 입력된 키에 해당하는 요소를 조회합니다.
  • put(): 키-값 쌍을 딕셔너리에 저장합니다.
  • hasKey(): 해당 키가 딕셔너리에 존재하는지 확인합니다.
  • delete(): 지정된 키를 딕셔너리에서 제거합니다.
  • clear(): 딕셔너리의 모든 키-값 쌍을 삭제합니다.
  • keys(): 모든 키를 배열 형태로 반환합니다.
  • values(): 모든 값을 배열 형태로 반환합니다.

참고: 자바스크립트의 내장 Map 객체

모던 자바스크립트(ES6 이상)에서는 위와 같은 딕셔너리 구조를 직접 구현하지 않아도 내장 Map 객체를 활용할 수 있습니다. Map은 set(), get(), has(), delete(), clear() 등의 메서드를 기본적으로 제공하며, 키의 삽입 순서를 기억한다는 장점이 있어 실무에서 딕셔너리가 필요할 때 가장 먼저 고려되는 선택지입니다.