위크맵과 위크셋

Dorogono·2022년 5월 16일
0

JS 알아보기

목록 보기
12/19
post-thumbnail

위크맵이란.

let john = { name: "John" };

let map = new Map();
map.set(john, "...");

john = null; // 참조를 null로 덮어써서 메모리 삭제 시도.

for(let obj of map.keys()){
  console.log('for :' ,JSON.stringify(obj));
}

Map에 있는 객체 john가비지 컬렉터의 대상이 되지 않아, 삭제되지 않는다.

객체 john을 찍으면 null값이 나오지만, 메모리 값에는 남아있다. (Map key 값을 부르면 나오기 때문)

let john = { name: "John" };

let weakMap = new WeakMap();
weakMap.set(john, "...");

john = null; // 참조를 null로 덮어써서 메모리 삭제 시도.

for(let obj of map.keys()) {
  console.log('for: ', JSON.stringify(obj))
}

위크맵의 키값객체만 가능하다.
그리고 해당 객체가 null 값과 같이 메모리에서 삭제를 시도한다면, 삭제된다.

또한, Map.set, Map.get, Map.delete, Map.has 같은 함수는 사용하지 못한다.

위크셋이란.

위크셋도 위크맵과 동일하다.
객체값을 키 값으로 받고, 사용되지 않는 객체라면 바로 가비지 컬렉터 대상이 되어 삭제된다.

그러면 이것들은 사용하긴 하는가?

추가해 줄 데이터는 객체가 살아있는 동안에만 유효한 상황에 저장할 공간이 없다면 가능하다.

쉽게 말해, 로그인이 됐을 때 시간을 저장하고 로그아웃 했을 때는 그 정보가 없어도 될 때 사용하면 된다.

이렇게 단시간에만 쓸모가 있고, 필요는 하지만 저장할 가치가 없는 데이터를 다룰 때, 메모리를 과부하시키지 않고 자동으로 삭제도 해주기 때문에 좋다.

profile
3D를 좋아하는 FE 개발자입니다.

2개의 댓글

comment-user-thumbnail
2022년 5월 16일

😮😮 대박!! 저도 오늘 WeekRef() 에 대해서 공부했는데 ㅋㅋㅋㅋ 통했네요 🤗🤗 ES2021에서 새로 추가된 문법이라니 신기하면서도 어떻게 활용하는 것이 좋을 지 고민이 되네요 ㅎㅎ 메모리를 능동적으로 조절할 수 있어 C언어가 생각나는 것 같습니다!! 오늘도 수고하셨습니다~~ 🙆‍♀️🙆‍♂️

답글 달기
comment-user-thumbnail
2022년 5월 16일

오늘은 처음 듣고 한번에 이해가 잘 되지않는 이론 같습니다. 가비지 컬렉터에 대해서는 노드 강의를 들을때 잠깐 강사님이 거론 했는데, Map 함수에서는 이행되지 않고 객체 에서만 실행 할수 있다니 나중에 메모리 관리가 필요하거나 할때 떠올릴수 있을거 같습니다.
오늘 수고하셨습니다. O(∩_∩)O

답글 달기