오늘도 코딩하나

[자료구조] 해시(Hash)_Javascript 본문

ALGORITHM

[자료구조] 해시(Hash)_Javascript

오늘도 코딩하나 2025. 1. 7. 13:40

아래 해시에 대한 설명은 자바스크립트를 기반으로 합니다.

해시 (Hash)
  • key : value 자료구조
  • 전화번호 같은거라고 생각하면 됨
해시 사용
  • 빠른 검색과 key : value 쌍 저장을 지원하는 자료구조

1️⃣ Map

  • 순서 보장 : 삽입된 순서대로 순회 가능
  • 모든 데이터 타입을 키로 사용 가능
  • 빠른 검색 성능을 제공
  • 중복된 키는 덮어쓰기 가능

2️⃣ Object

  • 문자열 또는 심볼만 키로 사용 가능
  • 프로토타입 상속이 포함됨
  • 성능 : Map보다 약간 떨어질 수 있음
  • 중복된 키는 덮어쓰기 가능

3️⃣ Set

  • 중복 없는 값만 저장
  • 값에 대한 검색과 추가가 효율적
  • 순서 보장 : 삽입 순서대로 값 순회 가능
특성 Map Object Set
저장 형식 키-값 쌍 (key-value pairs) 키-값 쌍 (key-value pairs) 값만 저장 (values only)
키에 사용 가능한 타입 모든 데이터 타입
(문자, 숫자, 객체 등)
문자열 또는 심볼만 사용 가능 모든 데이터 타입
(중복되지 않는 값만)
중복된 값 허용 여부 허용하지 않음
(키는 유일해야 함)
허용하지 않음 (키는 유일해야 함) 허용하지 않음 (값은 중복 불가)
중복된 키 처리 덮어쓰기(같은 키에 값을 다시 설정 시 덮어씀) 덮어쓰기 (같은 키에 값을 다시 설정 시 덮어씀) 해당 없음 (값만 저장하며 키가 없음)
순서 보장 삽입 순서 보장 일부 순서 보장 (문자열 키에 대해서는 삽입 순서 보장) 삽입 순서 보장 (값의 순서 보장)
기본 메서드 set(), get(), has(), delete() 등 obj[key], hasOwnProperty(), Object.keys() 등 add(), delete(), has() 등
성능 빠른 성능
(대규모 데이터셋에서 유리)
상대적으로 느림 (대규모 데이터셋에서 성능 저하 가능) 빠른 성능 (유일한 값 처리 시 유리)
순회 방식 map.entries()
map.keys()
map.values()
for...in
Object.keys()
Object.entries()
for...of
set.values()
set.entries()
기타 특징 효율적인 해시 기반 자료구조로서 삽입/삭제/조회 성능이 우수 기본적인 객체로 사용되며,
속성 추가/삭제/조회가 가능
값만 저장하며, 중복 제거와 순서가 중요한 경우 유용

 

❓ Set은 왜 해시 자료구조에 포함되는거지?

     Hash는 key : value 자료구조라고 정의하는데 Set은 key값 없이 value값만으로 데이터를 관리한다.

     그럼 어떻게 해시 자료구조라 할 수 있는것이지? 하는 의문이 들었다.

     ▶ Set은 해시 테이블의 전형적인 key : value 저장 방식과는 다르지만, 값의 유일성을 보장하기 위해 해시 방식을 사용            할 수 있다는 점에서 해시 기반 자료구조로 간주할 수 있다.

 

각 자료구조의 사용 케이스
자료구조 사용 상황 예시
Map - 키-값 쌍을 저장할 때
- 다양한 키 타입을 사용해야 할 때
- 삽입 순서가 중요할 때
- 설정 값 저장
- 각종 매핑 정보 저장
Object - 고정된 키로 데이터를 표현할 때
- 키가 문자열이나 심볼일 때
- 속성 접근 시
- 사용자 정보 저장
- JSON 데이터 구조 처리
Set - 중복 제거가 필요할 때
- 값만 저장할 때
- 순서대로 처리할 때
- 고유한 값 목록 저장
- 중복 요소 제거

* Map은 복잡한 데이터 구조나 순서가 중요한 경우

* Object는 간단한 데이터 저장과 구조적 작업

 

 

▶ 프로그래머스 문제 풀이 하러 가기

https://school.programmers.co.kr/learn/courses/30/parts/12077

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

'ALGORITHM' 카테고리의 다른 글

우선순위 큐(Priority Queue)와 힙(Heap)  (0) 2025.01.02