Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 WeakSet 완벽 정리 – 객체 전용 약한 참조 컬렉션 사용법


자바스크립트의 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>

출력 결과

자바스크립트 WeakSet 완벽 정리 – 객체 전용 약한 참조 컬렉션 사용법

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

자바스크립트 WeakSet 완벽 정리 – 객체 전용 약한 참조 컬렉션 사용법

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