JavaScript에서 Sets 및 Maps 탐색 (3)
본문
약점 (WeakSets)
WeakSets은 집합 데이터 구조로 작업 할 때 추가 유연성을 제공합니다. 그것들은 객체만 받아들이고 반복 할 수 없다는 점에서 일반 세트와 다릅니다. 그것들은 반복 될 수 없으며 clear() 메소드가 없습니다. 그러면 어떻게 추가 유연성을 제공합니까? 우리는 조금 볼 것입니다.
WeakSet 생성자를 사용하여 WeakSet을 만들 수 있습니다.
let user1 = {name: 'user 1', email: 'user1@example.com'};
let user2 = {name: 'user 2', email: 'user2@example.com'};
let user3 = {name: 'user 3', email: 'user3@example.com'};
const users = new WeakSet([user1, user2, user3]);
위의 코드는 새로운 WeakSet 객체를 만들고 객체 이외의 항목을 추가하면 TypeError를 반환합니다.
users.add('user 4');
console.log(users); // TypeError: Invalid value used in weak set
WeakSet에는 clear() 메서드가 없으므로 개체를 null로 설정해야만 개체를 삭제할 수 있습니다. 이것은 JavaScript 엔진의 가비지 수집 알고리즘이 null 객체에 할당 된 메모리를 자동으로 해제하여 WeakSet에서 삭제하기 때문에 작동합니다.
null로 설정된 WeakSets 객체는 프로그램이 여전히 실행되는 동안 가비지 수집되므로 특히 비동기 적으로 생성되는 대량의 데이터를 처리 할 때 메모리 소비를 줄이고 메모리 누수를 방지하기 때문에 훌륭합니다.
이 기능에는 메모리 관리의 세부 사항을 신경 쓰지 않고도 프로그래밍 문제에 대한 간단한 솔루션을 작성할 수 있는 기회가 있습니다.
Maps
JavaScript Maps는 각 항목의 고유 키를 기반으로 항목을 효율적으로 저장하고 검색하도록 설계된 객체입니다. 맵은 키와 값이 모두 기본 값이나 객체 또는 둘 다일 수 있는 키-값 쌍을 저장합니다.
MDN 문서는 지도 개체를 다음과 같이 설명합니다.
Map 객체는 키-값 쌍을 보유하며 키의 원래 삽입 순서를 기억합니다. 모든 값 (객체 및 기본 값 모두)은 키 또는 값으로 사용될 수 있습니다. Map 객체는 요소를 삽입 순서대로 반복합니다. for ... of 루프는 각 반복에 대해 [키, 값] 배열을 반환합니다.
Map 만들기
세트와 유사하게 맵을 쉽게 만들 수 있습니다. map 생성자를 사용하여 map를 만들어 보겠습니다.
const users = new Map();
console.log(users); // Map {}
아이템 추가
키-값 쌍은 set() 메소드를 사용하여 맵에 추가됩니다. 이 메소드는 두 번째 인수를 취합니다. 첫 번째는 키이고 두 번째는 키로 참조되는 값입니다.
users.set('John Doe', {
email: 'johndoe@example.com',
});
users.set('Jane Doe', {
email: 'janedoe@example.com',
});
console.log(users);
/__ console.log result
Map {
'John Doe' => { email: 'johndoe@example.com'},
'Jane Doe' => { email: 'janedoe@example.com'} }
__/
중복 키를 삭제하는 세트와 달리 map는 해당 키에 첨부 된 값을 업데이트합니다.
users.set('John Doe', {
email: 'johndoe477@example.com',
});
console.log(users);
/__ console.log result
Map {
'John Doe' => {email: 'johndoe477@example.com'},
'Jane Doe' => { email: 'janedoe@example.com'} }
__/
위의 예를 실행하면 John Doe의 이메일이 깔끔하게 대체됩니다.
- 이전글JavaScript에서 Sets 및 Maps 탐색 (4) 19.08.14
- 다음글JavaScript에서 Sets 및 Maps 탐색 (2) 19.08.14