
ES6(ECMAScript 2015) – Map, Set, WeakMap, WeakSet – 3 – WeakSet의 사용과 특징
WeakSet이란?
WeakSet은 ECMAScript 2015(ES6)에서 도입된 새로운 자료구조입니다. WeakSet은 Set과 비슷한 역할을 하며, 객체의 집합을 다룰 때 사용됩니다. 하지만 WeakSet은 일반적인 Set과는 다소 다른 동작과 특징을 가지고 있습니다.
WeakSet의 동작과 특징
WeakSet은 다음과 같은 특징을 가지고 있습니다.
1. 객체만 요소로 가질 수 있음
WeakSet은 객체만을 요소로 가질 수 있습니다. 기본 타입인 숫자나 문자열은 요소로 추가할 수 없습니다.
2. 객체의 참조를 약하게 유지함
WeakSet은 객체의 참조를 약하게 유지합니다. 다시 말해, WeakSet에 저장된 객체가 다른 곳에서 더 이상 참조되지 않는다면 가비지 컬렉터에 의해 메모리에서 자동으로 제거될 수 있습니다. 이는 메모리 누수를 방지하는 데 도움이 됩니다. 예를 들어, 어떤 객체를 WeakSet에 저장하고 나중에 그 객체를 다른 곳에서 참조하지 않는다면, 해당 객체는 가비지 컬렉터에 의해 제거될 수 있습니다.
3. 반복 작업을 지원하지 않음
WeakSet은 Set과 달리 반복 작업을 지원하지 않습니다. 따라서 WeakSet에 저장된 객체들을 순회하려면 다른 방법을 사용해야 합니다.
4. 주로 객체의 존재 여부를 체크하기 위해 사용됨
WeakSet은 객체의 존재 여부를 체크하기 위해 주로 사용됩니다. WeakSet에 특정 객체가 존재하는지 확인하고자 할 때 사용할 수 있습니다. 이때 WeakSet에 해당 객체가 존재하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
5. 메모리 관리에 유의해야 함
WeakSet은 객체의 참조를 약하게 유지하므로, 해당 객체를 다른 곳에서 참조하지 않을 때 메모리에서 자동으로 제거됩니다. 하지만 이는 동시에 주의해야 할 점이기도 합니다. WeakSet에 저장된 객체를 다른 곳에서 참조하지 않으면, 해당 객체는 예기치 않게 메모리에서 제거될 수 있습니다. 따라서 WeakSet을 사용할 때는 주의하여야 하며, 실제로 필요한 상황에서 적절히 활용해야 합니다.
WeakSet의 사용 예시
다음은 WeakSet의 사용 예시입니다.
// WeakSet 생성
const weakSet = new WeakSet();
// 객체 생성
const obj1 = { name: 'John' };
const obj2 = { name: 'Jane' };
// 객체를 WeakSet에 추가
weakSet.add(obj1);
weakSet.add(obj2);
// WeakSet에 객체가 존재하는지 확인
console.log(weakSet.has(obj1)); // true
console.log(weakSet.has(obj2)); // true
// 객체 참조 제거
obj1 = null;
// 가비지 컬렉터에 의해 메모리에서 자동 제거될 수 있음
위의 예시에서는 먼저 WeakSet을 생성하고, 두 개의 객체를 생성하여 WeakSet에 추가합니다. 그런 다음 has()
메서드를 사용하여 WeakSet에 특정 객체가 존재하는지 확인합니다. 마지막으로, obj1
에 null
을 할당하여 객체의 참조를 제거하면, 해당 객체는 가비지 컬렉터에 의해 메모리에서 자동으로 제거될 수 있습니다.
주의해야 할 점
WeakSet을 사용할 때 주의해야 할 점을 정리하면 다음과 같습니다:
- WeakSet은 객체만을 요소로 가질 수 있으므로, 기본 타입은 사용할 수 없습니다.
- WeakSet은 객체의 참조를 약하게 유지하므로, 다른 곳에서 해당 객체를 참조하지 않을 때 메모리에서 자동으로 제거됩니다. 이를 고려하여 적절한 상황에서 사용해야 합니다.
- WeakSet은 반복 작업을 지원하지 않으므로, 순회 등의 작업을 수행해야 할 때에는 다른 자료구조를 고려해야 합니다.
위의 주의사항을 염두에 두면서 적절하게 WeakSet을 사용하면, 메모리 누수를 방지하고 객체의 존재 여부를 체크하는 등 유용한 기능을 활용할 수 있습니다.
이상으로, ES6(ECMAScript 2015)의 Map, Set, WeakMap, WeakSet 중 WeakSet에 대한 사용과 특징에 대해 알아보았습니다. WeakSet은 객체의 참조를 약하게 유지하면서 메모리 관리에 도움을 주는 자료구조로, 주로 객체의 존재 여부를 체크하기 위해 사용됩니다. 그러나 주의해야 할 점도 있으므로 적절한 상황에서 사용해야 합니다. 잘 활용하면 메모리 관리에 유용한 도구가 될 수 있습니다.