JavaScript에서는 배열 외에도 여러 유형의 컬렉션을 제공하여 다양한 데이터 구조 요구사항을 충족시킵니다. 여기에는 Set, Map, WeakSet, WeakMap 등이 포함됩니다. 각각의 컬렉션과 그 사용 예를 살펴보겠습니다.
1. Set
Set 객체는 중복되지 않는 유일한 값들을 저장하는 컬렉션입니다. 주로 데이터의 유일성을 보장해야 할 때 사용됩니다.
예제
const mySet = new Set();
// 값 추가
mySet.add(1);
mySet.add(5);
mySet.add(5); // 중복된 값은 추가되지 않습니다.
console.log(mySet); // Set {1, 5}
// 값이 Set 내에 존재하는지 확인
console.log(mySet.has(1)); // true
console.log(mySet.has(3)); // false
// 값 제거
mySet.delete(5);
console.log(mySet); // Set {1}
// Set의 크기
console.log(mySet.size); // 1
2. Map
Map 객체는 키와 값의 쌍을 저장합니다. 기본적인 객체와 달리, 키로 다양한 타입의 값을 (함수, 객체, 기본 타입 등) 사용할 수 있습니다.
예제
const myMap = new Map();
// 키와 값의 쌍 추가
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
console.log(myMap); // Map {'key1' => 'value1', 'key2' => 'value2'}
// 키로 값을 가져오기
console.log(myMap.get('key1')); // 'value1'
// 키의 존재 여부 확인
console.log(myMap.has('key2')); // true
// 키-값 쌍 제거
myMap.delete('key1');
console.log(myMap); // Map {'key2' => 'value2'}
// Map의 크기
console.log(myMap.size); // 1
3. WeakSet
WeakSet은 객체만을 멤버로 허용하며, 멤버들이 가비지 컬렉션의 대상이 될 수 있도록 약한 참조를 유지하는 컬렉션입니다. 이는 Set과 비슷하지만, 몇 가지 제한이 있습니다 (예: 모든 값이 객체여야 함).
예제
const weakSet = new WeakSet();
const obj1 = {};
const obj2 = {};
// 객체 추가
weakSet.add(obj1);
weakSet.add(obj2);
// 객체 존재 여부 확인
console.log(weakSet.has(obj1)); // true
// 객체 제거
weakSet.delete(obj2);
console.log(weakSet.has(obj2)); // false
4. WeakMap
WeakMap은 키가 반드시 객체여야 하며, 값은 임의의 타입이 될 수 있습니다. WeakMap 내의 키-값 쌍은 가비지 컬렉션에서 회수될 수 있는 약한 참조를 유지합니다.
예제
const weakMap = new WeakMap();
const obj1 = {};
const obj2 = {};
// 객체를 키로 사용하여 값 설정
weakMap.set(obj1, 'Hello');
weakMap.set(obj2, 'World');
// 키로 값 가져오기
console.log(weakMap.get(obj1)); // 'Hello'
console.log(weakMap.get(obj2)); // 'World'
// 키의 존재 여부 확인
console.log(weakMap.has(obj1)); // true
// 키-값 쌍 제거
weakMap.delete(obj1);
console.log(weakMap.has(obj1)); // false
이렇게 Set, Map, WeakSet, WeakMap는 각각의 사용 시나리오에 따라 선택적으로 사용할 수 있는 유용한 자료 구조들입니다. 각각의 특성을 이해하고 적절히 활용하는 것이 중요합니다.
'프로그래밍 > Node.js & JavaScript' 카테고리의 다른 글
처음 배우는 JavaScript 강의. 3주차: 객체와 JSON (1) 객체 리터럴과 프로퍼티 접근 (79) | 2024.04.29 |
---|---|
처음 배우는 JavaScript 강의. 2주차: 함수와 배열 (3) 반복문 (for, while) (2) | 2024.04.29 |
처음 배우는 JavaScript 강의. 2주차: 함수와 배열 (2) 배열과 배열의 메소드 (0) | 2024.04.27 |
처음 배우는 JavaScript 강의. 2주차: 함수와 배열 (1) 함수의 정의와 호출 (심화. 함수 사용 예제) (4) | 2024.04.26 |
처음 배우는 JavaScript 강의. 2주차: 함수와 배열 (1) 함수의 정의와 호출 (1) | 2024.04.26 |