Map
- 키-값 쌍을 저장하는 데이터 구조
- 객체와 달리 키의 타입에 제한이 없음
- 삽입 순서가 유지됨
- 중복된 키를 허용하지 않음
- 이터러블 객체이므로
for...of 문이나 스프레드 연산자를 사용할 수 있음
객체(Object)와의 차이점
| 구분 | Map | Object |
|---|
| 키의 타입 | 어떤 데이터 타입도 가능 | 문자열 또는 심볼만 가능 |
| 삽입 순서 | 유지됨 | 보장되지 않음 |
| 반복 가능 여부 | for...of 사용 가능 | for...in으로만 가능 (키 순서 불명확) |
| 성능 | 대량의 데이터 처리에 더 최적화 | 일반적인 데이터 저장용 |
| 기본 프로토타입 상속 | 없음 | Object.prototype 상속됨 |
주요 메서드
| 메서드 | 설명 |
|---|
set(key, value) | 새로운 키-값 쌍 추가 |
get(key) | 키에 해당하는 값 반환 |
has(key) | 해당 키의 존재 여부 확인 |
delete(key) | 특정 키-값 쌍 삭제 |
clear() | 모든 요소 제거 |
size | 요소 개수 반환 |
const map = new Map();
map.set('name', 'Alice');
map.set(1, 'Number');
map.set(true, 'Boolean');
console.log(map.get('name'));
console.log(map.has(1));
map.delete('name');
map.clear();
Set
- 유일한 값만 저장하는 데이터 구조
- 중복된 값을 자동으로 제거됨
- 삽입 순서 유지됨
- 이터러블 객체이므로
for...of 문이나 스프레드 연산자 사용 가능
주요 메서드
| 메서드 | 설명 |
|---|
add(value) | 값 추가 |
has(value) | 값 존재 여부 확인 |
delete(value) | 특정 값 삭제 |
clear() | 모든 요소 제거 |
size | 요소 개수 반환 |
const set = new Set();
set.add(1);
set.add(2);
set.add(1);
console.log(set.size);
set.delete(2);
set.clear();
Map vs. Set
| 구분 | Map | Set |
|---|
| 저장 방식 | 키-값 쌍 저장 | 값만 저장 (중복 제거) |
| 키의 중복 | 허용되지 않음 | 값의 중복 자동 제거 |
| 순서 유지 여부 | 유지됨 | 유지됨 |
| 반복 가능 여부 | for...of 및 스프레드 연산자 사용 가능 | for...of 및 스프레드 연산자 사용 가능 |
- Map: 객체보다 더 다양한 타입의 키를 사용할 때, 데이터의 삽입 순서를 유지하면서 관리하고 싶을 때
- Set: 중복되지 않은 고유한 데이터만 관리하고 싶을 때, 배열 중복 제거 및 필터링