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;

// 위 둘은 서로 하나로 묶여있고 하나가 날아갔을때 같이 사라진다.