JavaScript의 Set
과 Map
은 ES6(ECMAScript 2015)에서 새로 추가된 데이터 구조입니다. 이들은 고유한 특징과 사용 사례를 가지고 있으며, 특정 요구 사항을 처리하는 데 매우 유용합니다. 각각의 데이터 구조에 대해 자세히 살펴보겠습니다.
1. Set
Set
은 중복된 값을 허용하지 않는 컬렉션입니다. Set 객체는 값의 집합을 저장하며, 각 값은 오직 한 번만 저장될 수 있습니다.
1.1 생성
Set
을 생성할 때는 빈 Set을 만들거나, 배열 등의 이터러블 객체를 인자로 전달할 수 있습니다.
// 빈 Set 생성
const set = new Set();
// 배열로부터 Set 생성
const numbers = new Set([1, 2, 3, 4]);
1.2 주요 메서드
add(value)
: Set에 값을 추가합니다. 이미 존재하는 값은 추가되지 않습니다.set.add(1); set.add(2); set.add(1); // 중복된 값, 무시됨 console.log(set); // Set { 1, 2 }
delete(value)
: Set에서 특정 값을 삭제합니다.set.delete(1); console.log(set); // Set { 2 }
has(value)
: Set에 특정 값이 존재하는지 확인합니다.console.log(set.has(2)); // true console.log(set.has(1)); // false
clear()
: Set의 모든 값을 삭제합니다.set.clear(); console.log(set); // Set {}
size
: Set에 있는 값의 개수를 반환합니다.console.log(set.size); // 0
1.3 반복
Set
은 forEach
메서드와 for...of
루프를 사용하여 반복할 수 있습니다.
const set = new Set([1, 2, 3]);
// forEach 사용
set.forEach(value => {
console.log(value);
});
// for...of 사용
for (const value of set) {
console.log(value);
}
1.4 Set의 특성
- 중복 없는 데이터: Set은 중복을 허용하지 않습니다.
- 순서 유지: 값이 삽입된 순서대로 반복됩니다.
- 객체 참조: Set은 객체의 참조를 비교하기 때문에, 같은 값이라도 서로 다른 객체는 별개의 요소로 간주됩니다.
2. Map
Map
은 키와 값의 쌍을 저장하는 컬렉션입니다. 키는 객체이든 기본 데이터형이든 상관없이 어떤 데이터 타입도 될 수 있으며, 값은 객체를 포함한 모든 데이터 유형이 될 수 있습니다.
2.1 생성
Map
을 생성할 때는 빈 Map을 만들거나, 배열의 배열 형태로 초기화할 수 있습니다.
// 빈 Map 생성
const map = new Map();
// 배열로부터 Map 생성
const entries = [['key1', 'value1'], ['key2', 'value2']];
const mapFromArray = new Map(entries);
2.2 주요 메서드
set(key, value)
: Map에 키와 값을 추가하거나 기존 키의 값을 업데이트합니다.map.set('name', 'Alice'); map.set('age', 30);
get(key)
: 주어진 키에 대한 값을 반환합니다.console.log(map.get('name')); // Alice
delete(key)
: 주어진 키와 해당 값을 삭제합니다.map.delete('age'); console.log(map.get('age')); // undefined
has(key)
: 주어진 키가 Map에 존재하는지 확인합니다.console.log(map.has('name')); // true console.log(map.has('age')); // false
clear()
: Map의 모든 키-값 쌍을 삭제합니다.map.clear(); console.log(map.size); // 0
size
: Map에 있는 키-값 쌍의 개수를 반환합니다.console.log(map.size); // 0
2.3 반복
Map
은 forEach
메서드와 for...of
루프를 사용하여 반복할 수 있습니다.
const map = new Map([
['name', 'Alice'],
['age', 30]
]);
// forEach 사용
map.forEach((value, key) => {
console.log(`${key}: ${value}`);
});
// for...of 사용
for (const [key, value] of map) {
console.log(`${key}: ${value}`);
}
2.4 Map의 특성
- 키의 데이터 유형: Map의 키는 객체, 기본 데이터형 모두 가능하며, 모든 키는 독립적으로 비교됩니다.
- 순서 유지: Map은 삽입된 순서대로 키-값 쌍을 반복합니다.
- 키 중복 불가: 같은 키를 다시 사용하면 기존 값이 업데이트됩니다.
3. Set과 Map의 차이점
특성 | Set | Map |
---|---|---|
저장할 데이터 | 값만 저장 (키와 값이 동일) | 키와 값의 쌍을 저장 |
키 데이터형 | 불필요 (값만 저장하므로) | 모든 데이터 타입 (키) 가능 |
중복 허용 | 중복된 값은 저장되지 않음 | 중복된 키는 존재할 수 없음 (값 업데이트) |
순서 유지 | 삽입된 순서대로 반복 | 삽입된 순서대로 반복 |
크기 | size 속성으로 크기 확인 | size 속성으로 크기 확인 |
4. 사용 사례
- Set:
- 중복된 값을 제거해야 할 때.
- 존재 여부를 빠르게 확인해야 할 때.
- Map:
- 키와 값을 쌍으로 저장하고 조회할 때.
- 객체의 속성을 동적으로 추가하거나 변경할 때.
결론
Set
과 Map
은 JavaScript에서 매우 유용한 데이터 구조로, 각각의 특성과 장점을 이해하고 적절한 상황에서 활용하는 것이 중요합니다. Set
은 중복을 허용하지 않는 컬렉션을 필요로 할 때 유용하고, Map
은 키와 값의 쌍을 저장할 때 강력한 기능을 제공합니다. 이들 데이터 구조는 복잡한 데이터 처리와 효율적인 탐색을 돕는 중요한 도구입니다.