WeakMap 및 WeakSet은 Map 및 Set과 유사하지만 메모리 관리와 관련된 주요 차이점이 있습니다. WeakMap과 WeakSet 모두 객체 저장을 허용하지만 더 이상 다른 곳에서 참조되지 않는 키나 값의 가비지 수집을 방지하지 않습니다. 이는 객체에 대한 메타데이터를 저장해야 하지만 스토리지가 해당 객체를 불필요하게 유지하고 싶지 않은 상황에 유용합니다.
WeakMap은 키는 객체여야 하며 값은 모든 데이터 유형이 될 수 있습니다. WeakMap의 주요 특징은 키에 대한 다른 참조가 없을 때 키가 가비지 수집되는 것을 방지하지 않는다는 것입니다.
WeakMap 생성자를 사용하여 키-값 쌍 배열을 전달하여 WeakMap을 생성할 수 있습니다.
const weakMap = new WeakMap();
set() 메소드를 사용하여 항목을 추가합니다.
const weakMap = new WeakMap();
const obj = {}; const weakMap = new WeakMap(); weakMap.set(obj, 'This is a weak map entry'); console.log(weakMap.get(obj)); // Output: 'This is a weak map entry'
WeakSet은 Set과 유사하지만 객체만 값으로 저장할 수 있고 해당 요소의 자동 가비지 수집도 허용합니다. 세트에 저장된 객체에 대한 참조가 없는 경우.
WeakSet 생성자를 사용하여 WeakSet을 생성할 수 있습니다.
const obj1 = {}; const obj2 = {}; const weakMap = new WeakMap(); weakMap.set(obj1, 'value1'); weakMap.set(obj2, 'value2'); console.log(weakMap.get(obj1)); // Output: 'value1' console.log(weakMap.has(obj2)); // Output: true weakMap.delete(obj1); console.log(weakMap.has(obj1)); // Output: false
add() 메소드를 사용하여 항목을 추가합니다.
const weakMap = new WeakMap();
const obj = {}; const weakMap = new WeakMap(); weakMap.set(obj, 'This is a weak map entry'); console.log(weakMap.get(obj)); // Output: 'This is a weak map entry'
Feature | WeakMap | WeakSet | Map | Set |
---|---|---|---|---|
Key/Value Types | Keys must be objects, values can be any type | Values must be objects | Keys and values can be any type | Values must be unique, any type |
Garbage Collection | Automatically garbage-collected when no references to the key | Automatically garbage-collected when no references to the value | Does not remove entries unless manually deleted | Does not remove entries unless manually deleted |
Iterability | Not iterable | Not iterable | Iterable (can loop through entries) | Iterable (can loop through values) |
Methods | set(), get(), has(), delete() | add(), has(), delete() | set(), get(), has(), delete() | add(), has(), delete() |
WeakMap 사용 사례:
WeakSet 사용 사례:
안녕하세요. 저는 Abhay Singh Kathayat입니다!
저는 프론트엔드와 백엔드 기술 모두에 대한 전문 지식을 갖춘 풀스택 개발자입니다. 저는 효율적이고 확장 가능하며 사용자 친화적인 애플리케이션을 구축하기 위해 다양한 프로그래밍 언어와 프레임워크를 사용하여 작업합니다.
내 비즈니스 이메일(kaashshorts28@gmail.com)로 언제든지 연락해주세요.
위 내용은 JavaScript로 WeakMap 및 WeakSet 마스터하기: 효율적인 메모리 관리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!