> 웹 프론트엔드 > JS 튜토리얼 > JavaScript로 WeakMap 및 WeakSet 마스터하기: 효율적인 메모리 관리

JavaScript로 WeakMap 및 WeakSet 마스터하기: 효율적인 메모리 관리

Susan Sarandon
풀어 주다: 2024-12-26 00:40:13
원래의
126명이 탐색했습니다.

Mastering WeakMap and WeakSet in JavaScript: Efficient Memory Management

JavaScript의 WeakMap 및 WeakSet 이해

WeakMapWeakSetMapSet과 유사하지만 메모리 관리와 관련된 주요 차이점이 있습니다. WeakMapWeakSet 모두 객체 저장을 허용하지만 더 이상 다른 곳에서 참조되지 않는 키나 값의 가비지 수집을 방지하지 않습니다. 이는 객체에 대한 메타데이터를 저장해야 하지만 스토리지가 해당 객체를 불필요하게 유지하고 싶지 않은 상황에 유용합니다.

1. JavaScript의 WeakMap

WeakMap키는 객체여야 하며 값은 모든 데이터 유형이 될 수 있습니다. WeakMap의 주요 특징은 키에 대한 다른 참조가 없을 때 키가 가비지 수집되는 것을 방지하지 않는다는 것입니다.

WeakMap 만들기

WeakMap 생성자를 사용하여 키-값 쌍 배열을 전달하여 WeakMap을 생성할 수 있습니다.

const weakMap = new WeakMap();
로그인 후 복사
로그인 후 복사
로그인 후 복사

WeakMap에 항목 추가

set() 메소드를 사용하여 항목을 추가합니다.

const weakMap = new WeakMap();
로그인 후 복사
로그인 후 복사
로그인 후 복사

WeakMap의 주요 특징:

  • 키는 객체여야 합니다: 문자열이나 숫자와 같은 기본 값은 키로 사용할 수 없습니다.
  • 가비지 컬렉션: WeakMap에서 키로 사용된 객체가 더 이상 참조되지 않으면 해당 키-값 쌍이 맵에서 자동으로 제거되어 메모리 누수를 방지하는 데 도움이 됩니다.

WeakMap 방법:

  • set(key, value): 키-값 쌍을 추가합니다.
  • get(key): 특정 키의 값을 검색합니다.
  • has(key): 맵에 키가 존재하는지 확인합니다.
  • delete(key): 키-값 쌍을 제거합니다.
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'
로그인 후 복사
로그인 후 복사

WeakMap에 대한 중요 참고 사항:

  • 메모리 효율적: WeakMap은 키에 대한 참조가 더 이상 없으면 자동으로 항목을 제거하므로 메모리 누수에 대한 걱정 없이 메타데이터를 캐싱하거나 저장하는 데 적합합니다.
  • 반복 가능성: WeakMap은 반복이 불가능합니다. 즉, 항목을 직접 반복할 수 없습니다(예: forEach() 또는 for...of 사용).

2. JavaScript의 WeakSet

WeakSetSet과 유사하지만 객체만 값으로 저장할 수 있고 해당 요소의 자동 가비지 수집도 허용합니다. 세트에 저장된 객체에 대한 참조가 없는 경우.

WeakSet 생성

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
로그인 후 복사

WeakSet에 항목 추가

add() 메소드를 사용하여 항목을 추가합니다.

const weakMap = new WeakMap();
로그인 후 복사
로그인 후 복사
로그인 후 복사

WeakSet의 주요 특징:

  • 값은 객체여야 합니다: 문자열이나 숫자와 같은 원시 값은 사용할 수 없습니다.
  • 가비지 컬렉션: WeakSet은 세트에 저장된 개체에 대한 참조가 없으면 자동으로 요소를 제거합니다.

WeakSet 메서드:

  • add(value): 집합에 값을 추가합니다.
  • has(value): 집합에 값이 존재하는지 확인합니다.
  • delete(value): 세트에서 값을 제거합니다.
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에 대한 중요 참고 사항:

  • 메모리 효율적: WeakMap과 마찬가지로 WeakSet 항목은 더 이상 사용되지 않을 때 가비지 수집되어 메모리 누수를 방지합니다.
  • 반복 불가능: WeakSet은 반복 가능하지 않으므로 forEach() 또는 for...of 루프를 사용하여 세트를 반복할 수 없습니다.

WeakMap, WeakSet, Map 및 Set 비교

기능
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()
위크맵 약한 집합 지도 설정 키/값 유형 키는 객체여야 하며 값은 모든 유형일 수 있습니다. 값은 객체여야 합니다 키와 값은 모든 유형일 수 있습니다 값은 모든 유형에서 고유해야 합니다. 쓰레기 수집 키에 대한 참조가 없으면 자동으로 가비지 수집 값에 대한 참조가 없으면 자동으로 가비지 수집 수동으로 삭제하지 않는 한 항목을 제거하지 않습니다 수동으로 삭제하지 않는 한 항목을 제거하지 않습니다 반복성 반복 불가능 반복 불가능 반복 가능(항목을 반복할 수 있음) 반복 가능(값을 반복할 수 있음) 방법 set(), get(), has(), 삭제() 추가(), has(), 삭제() set(), get(), has(), 삭제() 추가(), has(), 삭제()

WeakMap 및 WeakSet의 사용 사례

  • WeakMap 사용 사례:

    • 메타데이터 저장: 객체를 불필요하게 활성 상태로 유지하지 않고 객체와 관련된 메타데이터 또는 보조 데이터를 저장해야 할 때.
    • 개인 속성: 개체 자체의 가비지 수집을 방지하지 않고 클래스나 개체에 개인 속성을 저장합니다.
    • 캐시: 캐시된 개체가 가비지 수집을 차단하지 않도록 하는 캐시 시스템을 만듭니다.
  • WeakSet 사용 사례:

    • 객체 참조 추적: 객체가 더 이상 사용되지 않을 때 가비지 수집되는 것을 방지하지 않고 객체 참조를 추적해야 하는 경우.
    • 고유 개체 저장소: 개체가 더 이상 참조되지 않을 때 자동으로 정리되는 중복 없이 고유 개체를 저장하는 데 유용합니다.

결론

  • WeakMapWeakSet은 특히 객체 작업 시 메모리 관리가 중요한 시나리오에 적합한 도구입니다.
  • WeakMap은 키 자동 가비지 수집 기능이 있는 키-값 쌍용이고, WeakSet은 값 자동 가비지 수집 기능이 있는 고유 객체용입니다.
  • 두 구조 모두 일반 MapSet보다 메모리 효율성이 높기 때문에 메모리 누수를 방지하는 방식으로 메타데이터 관리, 캐싱 또는 객체 추적에 적합합니다.

안녕하세요. 저는 Abhay Singh Kathayat입니다!
저는 프론트엔드와 백엔드 기술 모두에 대한 전문 지식을 갖춘 풀스택 개발자입니다. 저는 효율적이고 확장 가능하며 사용자 친화적인 애플리케이션을 구축하기 위해 다양한 프로그래밍 언어와 프레임워크를 사용하여 작업합니다.
내 비즈니스 이메일(kaashshorts28@gmail.com)로 언제든지 연락해주세요.

위 내용은 JavaScript로 WeakMap 및 WeakSet 마스터하기: 효율적인 메모리 관리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿