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는 각각의 사용 시나리오에 따라 선택적으로 사용할 수 있는 유용한 자료 구조들입니다. 각각의 특성을 이해하고 적절히 활용하는 것이 중요합니다.

+ Recent posts