본문 바로가기

프로그래밍 언어/자바스크립트

JavaScript WeakSet: 정의, 사용법, 그리고 주요 특징

JavaScript WeakSet: 정의, 사용법, 그리고 주요 특징

JavaScript의 WeakSet은 특정한 상황에서 메모리 관리를 효율적으로 수행하는 독특한 컬렉션입니다. 이 글에서는 WeakSet의 정의, 주요 특징, 사용법과 실전 활용 예제를 다룹니다.

 

 

목차

  1. WeakSet이란?
  2. WeakSet 생성과 기본 사용법
  3. WeakSet의 주요 특징
  4. WeakSet 메서드 및 활용
  5. WeakSet 사용 예제
  6. WeakSet과 다른 컬렉션 비교

 

WeakSet이란?

JavaScript의 WeakSet은 객체(Object)만 저장할 수 있는 컬렉션으로, 특정 객체가 더 이상 필요하지 않을 때 자동으로 가비지 컬렉션이 수행됩니다.

  • WeakSet은 객체만 저장 가능: 기본 자료형(number, string 등)은 허용되지 않습니다.
  • 참조 기반: 저장된 객체에만 약한 참조를 유지합니다.

WeakSet은 주로 메모리 관리와 객체 참조 추적이 필요한 경우 사용됩니다.

 

 

 

WeakSet 생성과 기본 사용법

WeakSetnew 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 코드를 작성할 수 있습니다.