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

JavaScript WeakMap 객체 완벽 가이드: 개념부터 실전 예제까지

JavaScript의 WeakMap 객체는 키(key)와 값(value)으로 이루어진 요소들을 저장하는 컬렉션입니다. 다만 일반 Map과 달리 키는 반드시 객체여야 하며, 값은 원시 값(문자열, 숫자 등)이나 객체 모두 가능합니다.

WeakMap의 가장 큰 특징은 약한 참조(weak reference)를 유지한다는 점입니다. 즉, 키로 사용된 객체가 외부에서 더 이상 참조되지 않으면 해당 객체는 가비지 컬렉션(Garbage Collection)에 의해 자동으로 메모리에서 제거됩니다. 이러한 특성 덕분에 메모리 누수를 방지해야 하는 상황에서 유용하게 활용할 수 있습니다.

WeakMap 주요 특징

  • 키로 객체만 사용할 수 있으며, 원시 값은 키로 지정할 수 없습니다.
  • 키 객체에 대한 참조가 사라지면 가비지 컬렉터가 해당 항목을 회수합니다.
  • WeakMap은 열거(순회)가 불가능하므로 keys(), values(), size 같은 메서드나 속성을 제공하지 않습니다.

예제 코드

다음은 JavaScript에서 WeakMap 객체를 생성하고 활용하는 예제입니다.

<!DOCTYPE html>
<html lang="ko">
<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: rebeccapurple;
    }
</style>
</head>
<body>
<h1>JavaScript의 WeakMap 객체</h1>
<div class="result"></div>
<button class="Btn">Show WeakMap</button>
<h3>위 버튼을 클릭하면 WeakMap 객체를 생성하고 화면에 표시합니다</h3>
<button class="Btn">REMOVE</button>
<h3>위 버튼을 클릭하면 WeakMap 키의 참조를 제거합니다</h3>
<script>
    let resultEle = document.querySelector(".result");
    let btnEle = document.querySelectorAll(".Btn");
    let personObj = {
        name: "Rohan Sharma",
        age: 22,
        class: 9,
    };
    let WeakMap1 = new WeakMap();
    WeakMap1.set(personObj, "Rohan Object");
    btnEle[0].addEventListener("click", () => {
        resultEle.innerHTML = "personObj : " + WeakMap1.get(personObj) + "<br>";
    });
    btnEle[1].addEventListener("click", () => {
        personObj = null;
        resultEle.innerHTML += "personObj : " + WeakMap1.get(personObj) + "<br>";
        resultEle.innerHTML += " personObj is now removed from memory";
    });
</script>
</body>
</html>

실행 결과

위 코드를 실행하면 다음과 같은 화면이 출력됩니다.

JavaScript WeakMap 객체 완벽 가이드: 개념부터 실전 예제까지

'Show WeakMap' 버튼 클릭 시

버튼을 클릭하면 WeakMap에 저장된 personObj 키에 해당하는 값이 화면에 표시됩니다.

JavaScript WeakMap 객체 완벽 가이드: 개념부터 실전 예제까지

'REMOVE' 버튼 클릭 시

REMOVE 버튼을 클릭하면 personObj = null; 코드를 통해 객체 참조가 제거됩니다. 참조가 사라진 객체는 WeakMap 내부에서도 유효하지 않게 되며, 이후 가비지 컬렉터에 의해 메모리에서 해제됩니다.

JavaScript WeakMap 객체 완벽 가이드: 개념부터 실전 예제까지

정리

WeakMap은 객체를 키로 사용하면서도 해당 객체의 생명주기에 간섭하지 않는 특별한 컬렉션입니다. DOM 요소에 부가 데이터를 연결하거나 캐시를 구현할 때 메모리 누수 없이 안전하게 사용할 수 있어, 실무에서 매우 유용하게 활용됩니다.