JavaScript WeakSet: 정의, 사용법, 그리고 주요 특징
JavaScript의 WeakSet
은 특정한 상황에서 메모리 관리를 효율적으로 수행하는 독특한 컬렉션입니다. 이 글에서는 WeakSet
의 정의, 주요 특징, 사용법과 실전 활용 예제를 다룹니다.
목차
WeakSet이란?
JavaScript의 WeakSet
은 객체(Object)만 저장할 수 있는 컬렉션으로, 특정 객체가 더 이상 필요하지 않을 때 자동으로 가비지 컬렉션이 수행됩니다.
- WeakSet은 객체만 저장 가능: 기본 자료형(
number
,string
등)은 허용되지 않습니다. - 참조 기반: 저장된 객체에만 약한 참조를 유지합니다.
WeakSet은 주로 메모리 관리와 객체 참조 추적이 필요한 경우 사용됩니다.
WeakSet 생성과 기본 사용법
WeakSet
은 new WeakSet()
구문으로 생성합니다. 초기 값으로 객체 배열을 전달할 수도 있습니다.
예제:
// WeakSet 생성
const weakSet = new WeakSet();
// 객체 추가
const obj1 = { name: "Object 1" };
const obj2 = { name: "Object 2" };
weakSet.add(obj1);
weakSet.add(obj2);
console.log(weakSet.has(obj1)); // 출력: true
weakSet.delete(obj2);
console.log(weakSet.has(obj2)); // 출력: false
WeakSet의 주요 특징
특징 | 설명 |
---|---|
객체만 저장 | WeakSet은 객체만 저장 가능하며, 다른 데이터 타입은 허용되지 않습니다. |
약한 참조 | 저장된 객체가 더 이상 참조되지 않으면 자동으로 메모리에서 제거됩니다. |
반복 불가 | WeakSet은 저장된 객체를 반복(iterate)하거나 나열할 수 없습니다. |
WeakSet 메서드 및 활용
WeakSet
은 다음 세 가지 주요 메서드를 제공합니다:
add(value)
: 객체를 WeakSet에 추가합니다.delete(value)
: 특정 객체를 WeakSet에서 제거합니다.has(value)
: 특정 객체가 WeakSet에 포함되어 있는지 확인합니다.
예제:
const weakSet = new WeakSet();
const obj = { id: 1 };
weakSet.add(obj);
console.log(weakSet.has(obj)); // 출력: true
weakSet.delete(obj);
console.log(weakSet.has(obj)); // 출력: false
WeakSet 사용 예제
사용 사례 1: DOM 노드 추적
DOM 노드를 참조하면서도, 메모리 누수를 방지하고 싶을 때 WeakSet을 사용할 수 있습니다.
const visitedNodes = new WeakSet();
function markNode(node) {
if (!visitedNodes.has(node)) {
visitedNodes.add(node);
console.log("처음 방문한 노드:", node);
}
}
사용 사례 2: 사용자 활동 추적
사용자 객체를 추적하여 활동을 기록할 때도 WeakSet이 유용합니다.
WeakSet과 다른 컬렉션 비교
특징 | WeakSet | Set |
---|---|---|
저장 가능한 값 | 객체만 | 모든 데이터 타입 |
반복 가능 | 아니요 | 예 |
가비지 컬렉션 | 지원 | 미지원 |
결론
JavaScript의 WeakSet
은 메모리 관리와 객체 참조 추적이 중요한 상황에서 강력한 도구입니다. 다만, Set
과는 다르게 반복이 불가능하다는 점을 유의해야 합니다. WeakSet
의 특징과 활용법을 제대로 이해하면 더욱 효율적인 JavaScript 코드를 작성할 수 있습니다.
'프로그래밍 언어 > 자바스크립트' 카테고리의 다른 글
JavaScript null 이해하기, 데이터 타입과 값의 차이 (0) | 2024.12.06 |
---|---|
JavaScript 변수와 상수, 스코프와 호이스팅 (0) | 2024.11.30 |
JavaScript WeakMap의 기본 사용법과 활용 사례 (0) | 2024.11.18 |
JavaScript Set, 중복 없는 데이터 관리와 활용법 (0) | 2024.11.12 |
JavaScript Map 객체의 특징과 주요 메서드 살펴보기 (0) | 2024.11.06 |