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 같은 함수는 사용하지 못한다.
위크셋도 위크맵과 동일하다.
객체값을 키 값으로 받고, 사용되지 않는 객체라면 바로 가비지 컬렉터 대상이 되어 삭제된다.
추가해 줄 데이터는 객체가 살아있는 동안에만 유효한 상황에 저장할 공간이 없다면 가능하다.
쉽게 말해, 로그인이 됐을 때 시간을 저장하고 로그아웃 했을 때는 그 정보가 없어도 될 때 사용하면 된다.
이렇게 단시간에만 쓸모가 있고, 필요는 하지만 저장할 가치가 없는 데이터를 다룰 때, 메모리를 과부하시키지 않고 자동으로 삭제도 해주기 때문에 좋다.
😮😮 대박!! 저도 오늘 WeekRef() 에 대해서 공부했는데 ㅋㅋㅋㅋ 통했네요 🤗🤗 ES2021에서 새로 추가된 문법이라니 신기하면서도 어떻게 활용하는 것이 좋을 지 고민이 되네요 ㅎㅎ 메모리를 능동적으로 조절할 수 있어 C언어가 생각나는 것 같습니다!! 오늘도 수고하셨습니다~~ 🙆♀️🙆♂️