본문 바로가기

Node

MAP과 SET, WEAKMAP, WEAKSET

Map

  • Map은 객체와 유사한 자료구조
const m = new Map();
m.set('a','b'); // key: a , value: b로 Map속성에 추가
m.get(a) // get으로 a의 값 조회 
m.size; // size로 속성의 개수 조회
m.has(a); //has로 속성 존재 여부 확인, a를 가지고 있으면 true, 없으면 false
m.delete(a); //delete로 속성을 삭제
m.clear;//clear()로 전부제거



Set

  • Set은 배열과 유사한 자료구조
  • 배열을 완전히 대체하기 힘듬 -> 왜?  중복을 허용하지 않기 때문
  • 따라서 기존 배열의 중복을 제거할 때도 사용

 

const s = new Set();

s.add(false); //add(요소)로 Set에 추가합니다
s.add(1); 
s.add('1');
s.add(1); // 중복이므로 무시됨
s.add(2);

console.log(s.size);// 무시된 것 제외하고 4

s.has(1); // 1을 가지고 있으므로 true

for (const a of s) {
  console.log(a);   // false 1 '1' 2   
}

s.forEach((a) => {
  console.log(a);  // false 1 '1' 2   
})

s.delete(2); //delete로 속성을 삭제
s.clear;//clear()로 전부제거


중복을 제거하고 싶을 때

const arr = [1,3,2,7,2,6,3,5];

const s = new Set(arr); //배열을 Set에 넣어 중복제거 
const result = Array.from(s); //다시 배열로 만들기
console.log(result); // 1, 3, 2, 7, 6, 5


WeakMap

  • 객체만을 키로 허용하는 특별한 종류의 Map
  • 키가 가비지 컬렉션(garbage collection)에 의해 사라질 수 있게 해주는 특징을 가지고 있음
  • WeakMap은 가지고 있는 요소 전체를 반복 구문으로 탐색할 방법이 없음
  • 즉, WeakMap은 키가 사라지면 그에 연결된 값도 함께 사라지는 특징을 가지고 있음. 이러한 특성 때문에 메모리 누수를 방지하는데 유용
const wm = new WeakMap();

let obj = {}
wm.set(obj3, '123)

obj = null; //Garbage Collecting이 되면서 '123'도 같이 사라짐



WeakSet

  • Set의 weak 버전
  • 키가 가비지 컬렉션(garbage collection)에 의해 사라질 수 있게 해주는 특징을 가지고 있음

'Node' 카테고리의 다른 글

노드 내장 객체(global, console, 타이머)  (0) 2024.01.28
다이나믹 임포트  (0) 2024.01.24
for await(변수 of 프로미스 배열)  (0) 2024.01.24
async function  (0) 2024.01.24
프로미스  (0) 2024.01.24