-
Map, WeakMap@19.1 ~ /Nodejs 2020. 5. 31. 22:11
ES2015에서는 보다 안전하고 유연하며 ㅈ기관적인 방식으로 해시 맵 컬렉션으 ㄹ활용하도록 Map이라는 새로운 프로토타입을 도입했습니다
const profiles = new Map(); profiles.set('twitter', '@adalovelace'); profiles.set('facebook', 'adalovelace'); profiles.set('googleplus', 'ada'); profiles.size; //3 profiles.has('twitter'); // true profiles.get('twitter'); //"@adalovelace" profiles.has('youtube'); //false profiles.delete('facebook'); profiles.has('facebook'); //false profiles.get('facebook'); //undefined
보통 위에처럼 사용을 하는데
흥미로운것은 함수와 객체를 Map의 키로 사용할 수 있다는것 입니다
이것은 일반적인 객체로는 불가능한것..
const tests = new Map(); tests.set(()=>2+2, 4); tests.set(()=>2*2, 4); tests.set(()=>2/2, 1); for(const entry of tests){ console.log((entry[0] === entry[1]) ? 'PASS' : 'FAIL'); }
심지어 모든 entry들이 삽입 순서대로 출력된다.
WeakMap은 인터페이스 측면에서 Map과 매우 유사합니다
하지만 차이점도 있습니다
1. WeakMap은 가지고 있는 요소 전체를 반복 구문으로 탐색할 방법이 없다
이런 이유는 독특한 특징에서 시작된다
WeakMap은 키로 사용된 객체에 대한 유일 참조가 WeakMap내에만 남아있을 경우 이 객체를 가비지 컬렉트할 수 있다는 것입니다.
이것은 어플리케이션의 생명 주기 내에서 삭제되어야할 객체와 관련된 몇몇 메타 데이터를 저장하는 경우 매우 유용합니다let obj = {}; const map = new WeakMap(); map.set(obj, {key : "some_value"}); console.log(map.get(obj)); //{key : "some_value"} obj = undefined; //다음 가비지 컬렉트 사이클에서 맵에 관련된 객체와 데이터가 정리된다
'@19.1 ~ > Nodejs' 카테고리의 다른 글
프록시 패턴 (0) 2020.06.19 노드 Promise 패턴 (0) 2020.06.11 모듈 정의패턴 (0) 2020.06.03 콜백 규칙 및 예외처리 (0) 2020.05.31