ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

** โš  priv | ๊ฐ•์˜๋…ธํŠธ ์นดํ…Œ๊ณ ๋ฆฌ์— ์žˆ๋Š” ๋‚ด์šฉ์€ ๋ฐœํ–‰์ด ๋ชฉ์ ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „ํ˜€ ์ •์ œ๋˜์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹น.**

 

์„น์…˜ 7. Set & WeakSet

set : ์ค‘๋ณต์—†์ด ์œ ์ผํ•œ ๊ฐ’์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ์ฒดํฌํ•  ๋•Œ ์œ ์šฉ!

let mySet = new Set();

mySet.add("A");
mySet.add("๋‚˜");
mySet.add(3);

console.log(toString.call(mySet));    // ํƒ€์ž…์ฒดํฌ : "[object Set]"

console.log(mySet);    // Set(3) {"A", "๋‚˜", 3}

console.log(mySet.has("A"));    // true
console.log(mySet.has(1));    // false

mySet.delete("๋‚˜");

console.log(mySet.has("๋‚˜"));    // false

Set.prototype ๋ฉ”์„œ๋“œ

mySet.size : ์›์†Œ ์ˆ˜ ๋ฐ˜ํ™˜

mySet.add(value) ์ƒˆ๋กœ์šด ์š”์†Œ ์ถ”๊ฐ€
++ set1 === set1.add(1); // true

Set.prototype.delete(value)

value์™€ ๊ด€๋ จ๋œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ 

Set.prototype.has(value)๊ฐ€ ์ด์ „์— ๋ฐ˜ํ™˜ํ–ˆ๋˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Set.prototype.has(value)๋Š” ๊ทธ ๋’ค์— false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

mySet.clear() : set ๋น„์šฐ๊ธฐ

mySet.forEach() : set ์ˆœํ™˜

WeakSet : ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ
let arr = [1,2,3,4];
let ws = new WeakSet();

ws.add(arr);
console.log(ws);    // WeakSet {Array(4)}

ws.add(1);// Uncaught TypeError: Invalid value used in weak set

์›์‹œ๊ฐ’์€ ์ €์žฅ์•ˆ๋˜๊ณ ,
arr ์€ ์ €์žฅ๋จ ====> reference type๋“ค์„ ์ค‘๋ณต์—†์ด ์ €์žฅํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์œ ์šฉ

GC๊ฐ€ ์ฐธ์กฐ๋ฅผ ๊ณ„์† ๋ชจ๋‹ˆํ„ฐํ•˜๊ธฐ๋•Œ๋ฌธ์—
์ฐธ์กฐ๊ฐ€ ๋Š๊ธฐ๋ฉด WeakSet ์—์„œ๋„ ์‚ญ์ œ๊ฐ€ ๋œ๋‹ค!!!

let arr1 = [1,2,3,4];
let arr2 = [5,6,7,8];
let ws = new WeakSet();

ws.add(arr1);
ws.add(arr2);

arr1 = null;

console.log(ws.has(arr1));    // false
console.log(ws.has(arr2));    // true

WeakSet ์—์„œ๋Š” size ๋ฉ”์„œ๋“œ ์—†์Œ

add(val), delete(val), has(val) ๋งŒ ์‚ฌ์šฉ

์„น์…˜ 8. Map & WeakMap

map : key/value ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์Œ, objectํ˜•ํƒœ ๋ฐœ์ „

Map๊ณผ Object ์˜ ์ฐจ์ด

* ํ‚ค ์ž๋ฃŒํ˜•*
Map์˜ ํ‚ค๋Š” ํ•จ์ˆ˜, ๊ฐ์ฒด ๋“ฑ์„ ํฌํ•จํ•œ ๋ชจ๋“  ๊ฐ’์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
Object์˜ ํ‚ค๋Š” ๋ฐ˜๋“œ์‹œ String ๋˜๋Š” Symbol์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

* ํ‚ค ์ˆœ์„œ*
Map์˜ ํ‚ค๋Š” ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Map์˜ ์ˆœํšŒ๋Š” ์‚ฝ์ž…์ˆœ์œผ๋กœ ์ด๋ค„์ง‘๋‹ˆ๋‹ค.
Object์˜ ํ‚ค๋Š” ์ •๋ ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

* ํฌ๊ธฐ*
Map์˜ ํ•ญ๋ชฉ ์ˆ˜๋Š” size ์†์„ฑ์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Object์˜ ํ•ญ๋ชฉ ์ˆ˜๋Š” ์ง์ ‘ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

* ์ˆœํšŒ*
Map์€ ์ˆœํšŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ๋ฐ”๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Object๋ฅผ ์ˆœํšŒํ•˜๋ ค๋ฉด ๋จผ์ € ๋ชจ๋“  ํ‚ค๋ฅผ ์•Œ์•„๋‚ธ ํ›„, ๊ทธ ํ‚ค์˜ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Map.prototype.entries()

Map ๊ฐ์ฒด ์•ˆ์˜ ๋ชจ๋“  ์š”์†Œ๋“ค์„ [key, value] ํ˜•ํƒœ์˜ array ๋กœ ์ง‘์–ด๋„ฃ์€ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Iterator ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Map.prototype.get(key)

์ฃผ์–ด์ง„ ํ‚ค(Key)์— ํ•ด๋‹น๋˜๋Š” ๊ฐ’(value)์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋งŒ์•ฝ ์—†์œผ๋ฉด undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Map.prototype.set(key, value)

Map ๊ฐ์ฒด์— ์ฃผ์–ด์ง„ ํ‚ค(Key)์— ๊ฐ’(Value)๋ฅผ ์ง‘์–ด๋„ฃ๊ณ , Map ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋Œ“๊ธ€