Javascript
Map/Set [node.js 교과서]
muyeon
2023. 4. 9. 14:02
본 게시글은 node.js 교과서 강의를 듣고 정리한 글입니다.
Map
- map 은 일반 객체 리터럴과 비슷하다.
- map 은 생성자이다.
- 키랑 값을 객체로도 줄 수 있다. m.set({a : 'b'},{c : 'd'}); 이는 일반 객체와 다른점이다.
const m = new Map();
m.set(’a’, ‘b’); // set(키, 값) 으로 Map 에 속성 추가
m.set(’c’, ‘d’);
m.get(’a); // get(키) 로 속성값 조회
m.size; // size로 속생 개수 조회
for(const [k, v] of m) {
console.log(k, v);
} // 속성간의 순서도 보장된다.
m.forEach((v, k) ⇒ {
console.log(k, v);
});
m.has(d); // has(키)로 속성 존재여부를 확인할 수 있다.
m.delete(d); // delete(키) 로 속성을 삭제한다.
m.clear(); // clear() 로 전부 제거한다.
Set
- set 은 일반 배열 리터럴과 비슷하다.
- set 은 조금 특별한 배열
- set 은 중복을 허용하지 않는다는 것이 가장 큰 특징이다.
const s = new Set();
s.add(false);
s.add(1);
s.add(’1’);
s.add(1); // 중복이므로 무시된다.
s.add(2);
console.log(s.size);
s.has(1); // has(요소)로 요소 존재여부를 확인한다.
for(const a of s){
console.log(a) // false 1 ‘1’ 2
}
s.forEach((a) ⇒ {
console.log(a);
})
s.delete(2); // delete(요소) 로 요소를 제거한다.
s.clear(); // clear() 로 전부 제거한다.
- 중복이 없어야 할때, 배열에서 중복을 제거해야 할 때 사용하면 좋다.
- 다시 배열로 돌릴땐 Array.from(배열)
WeakMap / WeakSet
- weak 라는 건 가비지컬렉팅이 잘된다. 메모리에서 빨리빨리 정리가 된다는 것.
const wm = new WeakMap();
let obj3 = {};
wm.set(obj3, ‘123’);
obj3 = null; // obj3 가 null 로 바뀌었다면?
// 가비지 컬렉팅이 되면서 123도 같이 사라질것이다.
// 하지만 일반 Map의 경우는 가비지 컬렉팅이 되지 않는다. 메모리에 계속 남아있는다.
// 제거하려면 Map 까지 같이 없애야 사라진다.
// 만약 객체를 수정하면 안되는데 넣어야하는 값이있다면?
let user = {name : ‘zerocho’, age: 29};
user.married = false;
const userObj = {
user,
married : false,
}
// 이처럼 하겠지만 더 깔끔하게 할수 있다.
wm.set(user, { married: false } );
user = null;
// 위 둘은 서로 하나로 묶여있고 하나가 날아갔을때 같이 사라진다.