자바스크립트의 WeakSet은 객체 컬렉션을 저장하기 위한 특수한 자료구조입니다. 일반적인 Set과 마찬가지로 중복된 값을 저장하지 않는다는 공통점이 있지만, WeakSet은 오직 객체만 담을 수 있고 약한 참조(weak reference) 방식으로 값을 보관한다는 점에서 큰 차이가 있습니다.
WeakSet의 주요 특징
- 객체 전용: 숫자나 문자열 같은 원시 값은 저장할 수 없으며, 객체만 추가할 수 있습니다.
- 약한 참조 유지: WeakSet에 저장된 객체에 대한 외부 참조가 모두 사라지면, 가비지 컬렉터가 해당 객체를 메모리에서 자동으로 회수할 수 있습니다.
- 열거 불가: 요소를 순회(iteration)할 수 없으며,
size속성이나length()메서드도 제공하지 않습니다.
WeakSet의 주요 메서드
| 메서드 | 설명 |
|---|---|
| add(obj) | WeakSet에 새로운 객체를 추가합니다. |
| delete(obj) | WeakSet에서 지정한 객체를 삭제합니다. |
| has(obj) | WeakSet에 해당 객체가 존재하는지 여부에 따라 true 또는 false를 반환합니다. |
다음은 자바스크립트에서 WeakSet을 사용하는 예제 코드입니다.
예제
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
body {
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
.result {
font-size: 18px;
font-weight: 500;
color: red;
}
</style>
</head>
<body>
<h1>JavaScript WeakSet</h1>
<div class="result"></div>
<button class="Btn">CLICK HERE</button>
<h3>
CLICK the above button to add obj1 and obj2 to the WeakSet object
</h3>
<script>
let resultEle = document.querySelector(".result");
let weakObj = new WeakSet();
let obj1 = { a: 22 };
let obj2 = { b: 44 };
document.querySelector(".Btn").addEventListener("click", () => {
weakObj.add(obj1);
resultEle.innerHTML += "Obj1 added to weakset <br>";
weakObj.add(obj2);
resultEle.innerHTML += " Obj2 added to weakset <br>";
});
</script>
</body>
</html>
출력 결과

'CLICK HERE' 버튼을 클릭하면 −

버튼을 클릭하면 obj1과 obj2가 순서대로 WeakSet에 추가되며, 각 단계마다 화면에 결과가 표시됩니다. 이처럼 WeakSet은 객체의 존재 여부를 추적하면서도 해당 객체의 생명주기에는 영향을 주지 않아야 하는 상황에서 특히 유용하게 활용됩니다.