[TypeScript] 메타데이터 관리하기(with. WeakMap)
Table of contents
특정 객체의 메타데이터를 관리하는 방법으로 Map
을 떠올리는 것은 그렇게 어렵지 않을 것입니다. 객체를 키로, 메타데이터를 값으로 취급하면 쉽게 구현할 수 있을 것 같습니다. 하지만, 이 방법이 항상 사용할 수 있는 것은 아닙니다. 메타데이터의 생명 주기를 객체와 동일하게 유지하고 싶다고 합시다. 객체가 폐기되는 시점을 알아야 하겠지요? 그런데 이 시점이 가비지 수집 시점이라면 어떻게 하나요?
이러한 문제의 해결책 중 하나는 WeakMap
을 사용하는 것입니다. Map
과 비교하여 얻을 수 있는 이점은 키가 약한 참조로 유지된다는 것입니다. 약한 참조는 가비지 수집을 방해하지 않습니다. 따라서 값이 WeakMap
에서 해당 키에 대해서만 유지되고 있다면 키가 가비지 수집된 후에는 자연스럽게 값도 가비지 수집 대상이 됩니다. 결과적으로 가비지 수집 시점을 알지 못하더라도 메타데이터를 안전하게 폐기할 수 있게 됩니다.
WeakMap
은 몇몇 기능을 제공하지 않는다는 점을 제외하고는 Map
과 완전히 동일합니다. 기본적인 사용법은 아래와 같습니다.
interface A {
a: string;
}
const map = new WeakMap<A, number>();
let key: A | null = { a: "Hello, World!" };
map.set(key, 5);
console.log(map.get(key));
key = null;
WeakMap
에 대한 자세한 정보는 MDN 문서를 통해 확인할 수 있습니다.
읽어주셔서 감사합니다!
묻고 답하기
개인적인 판단에 의해 적절하다고 여겨지는 경우, 모두가 볼 수 있도록 이곳에 문답이 추가됩니다. 그렇지 않더라도 질문에 대한 답변은 별도로 이루어집니다.
Subscribe to my newsletter
Read articles from 고라니드로 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by