-
[ES6] WeakSet vs Set [번역]맨땅에코딩/javascript 2020. 8. 9. 23:53
[차이점]
앞서 작성한 WeakMap과 WeakSet 유사하다.
- Set과 유사하지만 object를 key로 가져야한다.
- object는 다른곳에서 접근 가능할 동안만 존재한다.
- Set 처럼, add, has, delete 메소드를 제공하나 size, keys()와 iteration은 제공하지 않는다.
"weak"이 된다는 것은 추가적 저장소로서의 활동하는것을 의미한다.
하지만, 임의적인 데이터가 아닌 예/아니오의 사실만을 위해서다.
[사용예]
let visitedSet = new WeakSet(); let john = { name: "John" }; let pete = { name: "Pete" }; let mary = { name: "Mary" }; visitedSet.add(john); // John visited us visitedSet.add(pete); // Then Pete visitedSet.add(john); // John again // visitedSet has 2 users now // check if John visited? alert(visitedSet.has(john)); // true // check if Mary visited? alert(visitedSet.has(mary)); // false john = null; // visitedSet will be cleaned automatically
가장 눈여겨볼 제한점은 반복의 부재인데, 아마도 불편함이 보여질 수 있다.
하지만 WeakSet은 주요작업의 수행을 막지는 않는다. - 다른 장소에 저장/관리되는 객체에 대한
"추가적인 데이터 저장소"가 된다.
let messages = [ {text: "Hello", from: "John"}, {text: "How goes?", from: "John"}, {text: "See you soon", from: "Alice"} ]; let readMessages = new WeakSet(); // two messages have been read readMessages.add(messages[0]); readMessages.add(messages[1]); // readMessages has 2 elements // ...let's read the first message again! readMessages.add(messages[0]); // readMessages still has 2 unique elements // answer: was the message[0] read? alert("Read message 0: " + readMessages.has(messages[0])); // true messages.shift(); // now readMessages has 1 element (technically memory may be cleaned later)
condition
1) messages object로부터 message가 삭제됏을때 데이터 구조로부터 삭제돼야함
2) message object를 수정하거나 추가할 수 없다.
[원문]
https://javascript.info/weakmap-weakset
'맨땅에코딩 > javascript' 카테고리의 다른 글
apply,call,bind 비교 (0) 2020.09.11 [ES6] WeakMap vs Map [번역] (0) 2020.08.09 [ES6] Set vs Array 비교 [번역] (0) 2020.08.07 [ES6] Map vs Object 비교 [번역] (0) 2020.08.07 [ES6] var, let, const 비교 (0) 2020.06.26