# Map

Map ๊ฐ์ฒด๋Š” ํ‚ค ์™€ ๊ฐ’์„ ํ•œ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค.

# Map ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

Map ๊ฐ์ฒด๋Š” Map ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

const map = new Map();

# Map ๊ฐ’ ์ถ”๊ฐ€

Map ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” Map.prototype.set๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

// map ์„ ์–ธ
const map = new Map();

// map ๊ฐ’ ์ถ”๊ฐ€ #1
map.set('key1', 'value1');
map.set('key2', 'value2');

// map ๊ฐ’ ์ถ”๊ฐ€ #2
map
  .set('key1', 'value1')
  .set('key2', 'value2');

console.log(map); // Map(2) { 'key' => 'value', 'key2' => 'value' }

๋˜ํ•œ, ์ค‘๋ณต๋œ ํ‚ค๊ฐ€ ์žˆ์„ ๋•Œ๋Š” Map๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ํ‚ค๋กœ ์ €์žฅ๋˜์ง€ ์•Š๊ณ , ๊ฐ’์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

// map ์„ ์–ธ
const map = new Map([['key1', 'value1'], ['key1', 'value2']]);
console.log(map); // Map(1) { 'key1' => 'value2' }

# Map ๊ฐ’ ์‚ญ์ œ

Map ๊ฐ์ฒด์˜ ๊ฐ’์„ ์‚ญ์ œํ•˜๋ ค๋ฉด Map.prototype.delete๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Map์˜ ๋ชจ๋“  ๊ฐ’์„ ์‚ญ์ œํ•  ๊ฒฝ์šฐ์—๋Š” Map.prototype.clear๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

// map ์„ ์–ธ
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);

// map ๊ฐ’ ์‚ญ์ œ
map.delete('key1')
console.log(map); // Map(1) { 'key2' => 'value2' }

// map ๋ชจ๋“  ๊ฐ’ ์‚ญ์ œ
map.clear();
console.log(map); //Map(0) {}

# Map ๋ฐ˜๋ณต๋ฌธ

Map ๊ฐ์ฒด์˜ ๊ฐ’๋“ค์„ ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด Map.prototype.forEach๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, forEach๊ฐ€ ๋ฐ›๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋Š” 3๊ฐ€์ง€(๊ฐ’, ํ‚ค, map) ์ž…๋‹ˆ๋‹ค.

// map ์„ ์–ธ
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);

map.forEach((val, key) => {
  console.log(val + "," + key);
});

// ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค
// value1,key1
// value2,key2


// key๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ
for (let key of map.keys()){
    console.log("key : " + key);
}
// ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค
// key : key1
// key : key2


// value ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ
for (const value of map.values()) {
    console.log("value : " + value);
}
// ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค
// value : value1
// value : value2


// entries ๋ฐ˜๋ณต๋ฌธ
for (let[key, value] of map.entries()) {
    console.log(key + " : " +value);
}
// ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค
// key1 : value1
// key2 : value2

# Map์˜ ์ฃผ์š”๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ

์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ฉ”์„œ๋“œ ์™ธ์— Map์„ ์กฐ์ž‘ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ์ž…๋‹ˆ๋‹ค.

  • map.get(key): key์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • map.has(key): key๊ฐ€ ์กด์žฌํ•˜๋ฉด true, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • map.size: ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

# Set

Set ๊ฐ์ฒด๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. Set์„ ํ†ตํ•ด ๊ต์ง‘ํ•ฉ, ํ•ฉ์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ ๋“ฑ ์ˆ˜ํ•™์  ์ง‘ํ•ฉ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

# Set ๊ฐ์ฒด์˜ ์ƒ์„ฑ

Set์€ Set์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

const set = new Set();

# Set ๊ฐ’ ์ถ”๊ฐ€

Set๊ฐ์ฒด์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” Set.prototype.add๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

// set ์„ ์–ธ
const set = new Set();

// set ๊ฐ’ ์ถ”๊ฐ€ #1
set.add('javascript');
set.add('vue');
set.add('node');

// set ๊ฐ’ ์ถ”๊ฐ€ #2
set.add('javascript').add('vue').add('node');

console.log(set); // Set(3) { 'javascript', 'vue', 'node' }

๋˜ํ•œ, Set์€ ์ค‘๋ณต๋œ ๊ฐ’์˜ ์ถ”๊ฐ€๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

// set ์„ ์–ธ
const set = new Set();
set.add('apple').add('banana').add('banana');

console.log(set); // Set(2) { 'apple', 'banana' }

# Set ๊ฐ’ ์‚ญ์ œ

Set ๊ฐ์ฒด์˜ ๊ฐ’์„ ์‚ญ์ œํ•˜๋ ค๋ฉด Set.prototype.delete๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Set๋‚ด ๋ชจ๋“  ๊ฐ’์„ ์‚ญ์ œํ•  ๊ฒฝ์šฐ์—๋Š” Set.prototype.clear๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

// set ์„ ์–ธ
const set = new Set(['apple', 'banana', 'orange']);

// set ๊ฐ’ ์‚ญ์ œ
set.delete('banana')
console.log(set); // Set(2) { 'apple', 'orange' }

// set ์ „์ฒด ๊ฐ’ ์‚ญ์ œ
set.clear();
console.log(set); // Set(0) {}

# Set ๋ฐ˜๋ณต๋ฌธ

Set ๊ฐ์ฒด์˜ ๊ฐ’๋“ค์„ ์ˆœํšŒํ•˜๋ ค๋ฉด Set.prototype.forEach๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, forEach๊ฐ€ ๋ฐ›๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋Š” 3๊ฐ€์ง€( ์š”์†Œ ๊ฐ’, ์š”์†Œ ๊ฐ’, Set) ์ž…๋‹ˆ๋‹ค.

// set ์„ ์–ธ
const set = new Set(['apple', 'banana', 'orange']);

// set ๊ฐ’ ์ˆœํšŒ
set.forEach((val, val2, set) => {
 console.log(val, val2, set);
});
// ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.
// apple apple Set(3) { 'apple', 'banana', 'orange' }
// banana banana Set(3) { 'apple', 'banana', 'orange' }
// orange orange Set(3) { 'apple', 'banana', 'orange' }

for (const val of set) {
 console.log(val);
}
// ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.
// apple
// banana
// orange


// key ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ
for (const key of set.keys()) {
   console.log(key);
}
// ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค
// apple
// banana
// orange


// value ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ , set ์—์„œ values() ๋Š” keys()์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
for (const value of set.values()) {
   console.log(value);
}
// ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค
// apple
// banana
// orange


// ์ถ”๊ฐ€๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
for (const [key, value] of set.entries()) {
   console.log("key" + " = " + key);
   console.log("value" + " = " + value);
}
// ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค
// key = apple
// value = apple
// key = banana
// value = banana
// key = orange
// value = orange

# Set์˜ ์ฃผ์š”๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ

์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ฉ”์„œ๋“œ ์™ธ์— Set๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ์ž…๋‹ˆ๋‹ค.

  • set.has(value): value๊ฐ€ ์กด์žฌํ•˜๋ฉด true, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • set.size: Set ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ์›์†Œ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.