๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐ŸŒˆ Chapter 3 : ํŠน์ˆ˜ํ•œ ์ปฌ๋ ‰์…˜์„ ์ด์šฉํ•ด ์ฝ”๋“œ ๋ช…๋ฃŒ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋ผ.

๐ŸŽฏ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ์ •์ ์ธ ํ‚ค-๊ฐ’์„ ํƒ์ƒ‰ํ•˜๋ผ.โ€‹

  • ๋‹ค์Œ ์˜ˆ์ œ๋Š” ์–ด๋–ค ์ƒ‰๊น”์˜ ์ฝ”๋“œ์ธ์ง€ ์›๋ž˜๋ถ€ํ„ฐ ์•Œ์ง€ ๋ชปํ•˜๋ฉด ๋ฌด์Šจ ์ƒ‰์„ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†๋‹ค.
const colors = ['#d10202', '#19d836', '$0e33d8'];
  • ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ํ‚ค-๊ฐ’ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด์˜ ์˜๋ฏธ๋ฅผ ์ž˜ ์ดํ•ด์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ค‘๊ด„ํ˜ธ์— ํ‚ค-๊ฐ’์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด(object literal)์ด๋ผ๊ณ  ํ•œ๋‹ค.
const colors = {
red: '#d10202',
green: '#19d836',
blue: '$0e33d8'
}
  • ๊ฐ์ฒด๋„ ํ•˜๋‚˜์˜ ์ปฌ๋ ‰์…˜์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ , ๋งต์ฒ˜๋Ÿผ ๋‹ค๋ฅธ ์ปฌ๋ ‰์…˜์˜ ๊ฒฝ์Ÿ ์ƒ๋Œ€๋กœ ๋ด๋ณด๋ฉด, ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์„ ํƒํ•  ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์–ด๋– ํ•œ ๊ฒฝ์šฐ์— ๊ฐ์ฒด๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ตœ์„ ์ผ์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค.
  • ์›์น™์ ์œผ๋กœ ๊ฐ์ฒด๋Š” ๋ณ€ํ™”๊ฐ€ ์—†๊ณ  ๊ตฌ์กฐํ™”๋œ ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๋‹ค.
  • ๋ฐ˜๋ฉด์— ์ž์ฃผ ๊ฐฑ์‹ ๋˜๊ฑฐ๋‚˜ ์‹คํ–‰๋˜๊ธฐ ์ „์—๋Š” ์•Œ ์ˆ˜ ์—†๋Š” ๋™์ ์ธ ์ •๋ณด๋ฅผ ๋‹ค๋ฃจ๊ธฐ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.
  • ์ด๋ ‡๋“ฏ ๊ณ„์†ํ•ด์„œ ๊ฐฑ์‹ , ๋ฐ˜๋ณต, ๋Œ€์ฒด, ์ •๋ ฌํ•ด์•ผ ํ•  ์ •๋ณด์—๋Š” ๋งต์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค.
  • ๊ทธ๋ ‡์ง€๋งŒ ์ •์ ์ธ ๊ฐ์ฒด๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ•จ์ˆ˜ ๋‚ด์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ „๋‹ฌํ•ด ๋‹ค๋ฅธ ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ •์ ์ธ ์ •๋ณด๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ทธ ๋น„๊ฒฐ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๋ฒˆ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์˜ ๊ฐ์ฒด๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ๊ฐ์˜ ํ•จ์ˆ˜์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ๋˜ํ•œ, ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํ‚ค๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ์ ์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด ํ‚ค๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” ํ•จ์ˆ˜์—์„œ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์•Œ๊ณ  ์žˆ๋‹ค.
function getBill(item) {
return {
name: item.name,
due: twoWeeksFromNow(),
total: calculateTotal(item.price),
};
}

const bill = getBill({
name: '๊ฐ์‹ค ์ฒญ์†Œ',
price: 30,
});

function displayBill(bill) {
return `${bill.name} ๋น„์šฉ์€ ${bill.total} ๋‹ฌ๋Ÿฌ์ด๋ฉฐ ๋‚ฉ๋ถ€์ผ์€ ${bill.due}์ž…๋‹ˆ๋‹ค.`;
}

๐ŸŽฏ Object.assign()์œผ๋กœ ์กฐ์ž‘ ์—†์ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ผ.โ€‹

  • ๊ฐ์ฒด๋„ ๋ฐฐ์—ด๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์กฐ์ž‘๊ณผ ๋ถ€์ˆ˜ ํšจ๊ณผ๋กœ ์ธํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ฐ์ฒด์— ๋ฌด์‹ฌ์ฝ” ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด์„œ, ์›๋ž˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋ถ€์ˆ˜ ํšจ๊ณผ๋‚˜ ์กฐ์ž‘์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • ์•„๋ž˜ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ์ž˜๋ชป๋œ ๋ถ€๋ถ„์€ ์—†์ง€๋งŒ ์žฅํ™ฉํ•˜๋‹ค.
const defaults = {
author: '',
title: '',
year: 2017,
rating: null,
};

const book = {
author: '์ƒํ…์ฅํŽ˜๋ฆฌ',
title: 'The Little Prince',
};

function addBookDefaults(book, defaults) {
const fields = Object.keys(defaluts);
const updated = {};
for(let i = 0; i < fields.length; i++){
const field = fields[i];
updated[field] = book[field] || defaults[field];
}
return updated;
}
  • ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ES6๋Š” Object.assign()์„ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ํ‚ค-๊ฐ’์œผ๋กœ ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.
  • ์ฆ‰, Object.assign()์„ ์ด์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ด์šฉํ•ด์„œ ๊ฐ์ฒด๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Object.assign()์˜ ์ž‘๋™ ์›๋ฆฌ๋Š” ๋ฉ”์„œ๋“œ๋Š” ์ผ๋ จ์˜ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๊ณ  ๊ฐ€์žฅ ๋จผ์ € ์ธ์ˆ˜๋กœ ๋ฐ›์€ ๊ฐ์ฒด๋ฅผ ๋’ค์ด์–ด ์ธ์ˆ˜๋กœ ๋„˜๊ธด ๊ฐ์ฒด์˜ ํ‚ค-๊ฐ’์„ ์ด์šฉํ•ด์„œ ๊ฐฑ์‹ ํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๊ณ  ๋‚˜์„œ ๊ฐฑ์‹ ๋œ ์ฒซ ๋ฒˆ์งธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ ํ˜ธ์ถœ ์‹œ ์ธ์ˆ˜ ์ˆœ์„œ๋Œ€๋กœ ์ ์šฉ๋˜๋ฏ€๋กœ, ๋จผ์ € ์ „๋‹ฌํ•œ ๊ฐ์ฒด๋ถ€ํ„ฐ ์ ์šฉ๋˜๊ณ  ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ „๋‹ฌํ•œ ๊ฐ์ฒด๊ฐ€ ๋งจ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ ์šฉ๋œ๋‹ค.
  • ์œ„ ์˜ˆ์ œ ์ฝ”๋“œ์˜ addBookDefaults()๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์•„์ง„๋‹ค.
Object.assign(defaults, book);
// {author: "์ƒํ…์ฅํŽ˜๋ฆฌ", title: "The Little Prince", year: 2017, rating: null}
  • ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ๊ฐ’ ๊ฐ์ฒด๋ฅผ ๊ฐฑ์‹ ํ•˜๋ฉด์„œ ์›๋ณธ ๊ฐ์ฒด๋ฅผ ์กฐ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.
console.log(defaults);
// {author: "์ƒํ…์ฅํŽ˜๋ฆฌ", title: "The Little Prince", year: 2017, rating: null}
  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒซ ๋ฒˆ์งธ ๊ฐ์ฒด์— ๋นˆ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋นˆ ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ๊ฐ’์ด ๊ฐฑ์‹ ๋˜์–ด ๋ฐ˜ํ™˜๋˜๊ณ  ๋‹ค๋ฅธ ๊ฐ์ฒด์—๋Š” ์กฐ์ž‘์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
const updated = Object.assign({} ,defaults, book);
// {author: "์ƒํ…์ฅํŽ˜๋ฆฌ", title: "The Little Prince", year: 2017, rating: null}
console.log(updated);
// {author: "", title: "", year: 2017, rating: null}
console.log(defaults);
  • Object.assign()์„ ์ด์šฉํ•œ ๋ณต์‚ฌ์—๋Š” ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๋ฐ, ์†์„ฑ์„ ๋ณต์‚ฌํ•˜๋ฉด ๊ฐ’๋งŒ ๋ณต์‚ฌํ•œ๋‹ค.
  • ์•„๋ž˜์˜ ์˜ˆ์ œ๋Š” ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์ด๋‹ค.
const defaultEmployee = {
name: {
first: '',
last: '',
},
years: 0,
};
const employee = Object.assign({}, defaultEmployee);
  • ์ค‘์ฒฉ๋œ ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ๊นŠ์€ ๋ณต์‚ฌ(deep copy) ๋˜๋Š” **๊นŠ์€ ๋ณ‘ํ•ฉ(deep merge)**์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ๊ทธ ๋•Œ๋ฌธ์— years ์†์„ฑ์€ ๋ฌธ์ œ์—†์ด ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, name ์†์„ฑ์€ ๋ณต์‚ฌํ•  ์ˆ˜ ์—†๋‹ค.
  • ์‹ค์ œ๋กœ ํ‚ค name์— ํ• ๋‹น๋œ ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋งŒ ๋ณต์‚ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์ฒฉ๋œ ๊ฐ์ฒด๋Š” ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•œ๋‹ค.
  • ์ค‘์ฒฉ๋œ ๊ฐ์ฒด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฟ์ด๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ์— ๋Œ€ํ•œ ๋ณต์‚ฌ๋งŒ์œผ๋กœ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์— ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋‹จ์ง€ ์ฐธ์กฐ์˜ ์œ„์น˜๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์— ๋ถˆ๊ณผํ•˜๋‹ค.
  • ๋”ฐ๋ผ์„œ ์›๋ณต ๊ฐ์ฒด ๋˜๋Š” ๋ณต์‚ฌํ•œ ๊ฐ์ฒด ์ค‘ ์–ด๋””์„œ๋ผ๋„ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์›๋ณธ ๊ฐ์ฒด์™€ ๋ณต์‚ฌํ•œ ๊ฐ์ฒด ๋ชจ๋‘ ๋ณ€๊ฒฝ๋œ๋‹ค.
employee.name.first = 'Sa';
// {
// name: {first: "Sa", last: ""},
// years: 0,
// }
  • ์ด๋Ÿฌํ•œ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด๋กœ ์ธํ•œ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€์ด๋‹ค.
  • ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด๋ฅผ ๋‘์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ Object.assign()์„ ์ด์šฉํ•ด์„œ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•ด์•ผ ํ•œ๋‹ค.
const employee2 = Object.assign(
{},
defaultEmployee,
{
name: Object.assign({}, defaultEmployee.name),
},
);
employee2.name.first = 'Sa';
defaultEmployee;
// {
// name: {first: "", last: ""},
// years: 0,
// }

๐ŸŽฏ ๊ฐ์ฒด ํŽผ์นจ ์—ฐ์‚ฐ์ž๋กœ ์ •๋ณด๋ฅผ ๊ฐฑ์‹ ํ•˜๋ผ.โ€‹

  • Object.assign()์˜ ์ด์ ์„ ๊ฐ์ฒด ํŽผ์นจ ์—ฐ์‚ฐ์ž์˜ ๊ฐ„๋‹จํ•œ ๋ฌธ๋ฒ•์œผ๋กœ ๋Œ€์ฒดํ•ด ๋ณด์ž.
  • ๊ฐ์ฒด ํŽผ์นจ ์—ฐ์‚ฐ์ž๋Š” ES2018 ๋ช…์„ธ์— ๊ณต์‹์ ์œผ๋กœ ํฌํ•จ๋˜์—ˆ๋‹ค.
  • ๊ฐ์ฒด ํŽผ์นจ ์—ฐ์‚ฐ์ž๋Š” ํ‚ค-๊ฐ’ ์Œ์„ ๋ชฉ๋ก์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
const book = {
author: '์ƒํ…์ฅํŽ˜๋ฆฌ',
title: 'The Little Prince',
};
const update = { ...book, year: 1943 };
// {author: "์ƒํ…์ฅํŽ˜๋ฆฌ", title: "The Little Prince", year: 1943}
  • ๋™์ผํ•œ ํ‚ค์— ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์–ด๋–ค ๊ฐ’์ด๋“  ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์„ ์–ธ๋œ ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.
const book = {
author: '์ƒํ…์ฅํŽ˜๋ฆฌ',
title: 'The Little Prince',
};
const update = { ...book, title: 'Little Prince' };
// {author: "์ƒํ…์ฅํŽ˜๋ฆฌ", title: "Little Prince"}
  • Object.assign()์„ ์ด์šฉํ•œ ์˜ˆ์ œ๋ฅผ ๊ฐ์ฒด ํŽผ์นจ ์—ฐ์‚ฐ์ž๋กœ ๋ณ€๊ฒฝํ•ด ๋ณด์ž.
const defaults = {
author: '',
title: '',
year: 2017,
rating: null,
};

const book = {
author: '์ƒํ…์ฅํŽ˜๋ฆฌ',
title: 'The Little Prince',
};

// const updated = Object.assign({}, defaults, book);
const bookWithDefaults = { ...defaults, ...book };
  • Object.assign()์—์„œ ๊ฒฝํ—˜ํ–ˆ๋˜ ๊นŠ์€ ๋ณ‘ํ•ฉ ๋ฌธ์ œ๋Š” ๊ฐ์ฒด ํŽผ์นจ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๊ทธ๋ ‡์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ์ฒด ํŽผ์นจ ์—ฐ์‚ฐ์ž๋กœ ์ข€ ๋” ๋ณด๊ธฐ ์ข‹๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋Š” ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
const employee = {
...defaultEmployee,
name: {
...defaultEmployee.name,
},
};

๐ŸŽฏ ๋งต์œผ๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•˜๋ผ.โ€‹

  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์žฆ์€ ํ‚ค-๊ฐ’ ์ปฌ๋ ‰์…˜์— ๋งต ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋งต(Map)์€ ํŠน์ • ์ž‘์—…์„ ๋งค์šฐ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ํŠน๋ณ„ํ•œ ์ข…๋ฅ˜์˜ ์ปฌ๋ ‰์…˜์ด๋‹ค.
    • ํ‚ค-๊ฐ’ ์Œ์ด ์ž์ฃผ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋Š” ๊ฒฝ์šฐ
    • ํ‚ค๊ฐ€ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ๊ฒฝ์šฐ
  • ๋งต์€ ๊ฐ์ฒด์™€ ๋‹ค๋ฅด๊ฒŒ ํ‚ค-๊ฐ’ ์Œ์„ ์ž์ฃผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ์— ์ ํ•ฉํ•˜๋„๋ก ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ช…ํ™•ํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฐ˜๋ณต๊ณผ ๊ฐ™์€ ๋™์ž‘์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋งต์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข€ ๋” ์ƒ์‚ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋งต์€ ์ข€ ๋” ํŠนํ™”๋œ ์ปฌ๋ ‰์…˜์ด๋ฏ€๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ๊ฐœ๋ฐœ์ž๋“ค์€ ์ฝ”๋“œ๊ฐ€ ์ข€ ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ์ฒด์—์„œ ํ‚ค ํƒ์ƒ‰์€ ์„ ํ˜• ์‹œ๊ฐ„์ด ์†Œ์š”๋˜์ง€๋งŒ, ๋งต์ด ๋ธŒ๋ผ์šฐ์ €์— ๋‚ด์žฅ ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ ๋งต์˜ ํ‚ค ํƒ์ƒ‰์€ ๋กœ๊ทธ ์‹œ๊ฐ„์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฆ‰, ํฐ ๊ฐ์ฒด๊ฐ€ ํฐ ๋งต๋ณด๋‹ค ๋น„์šฉ์ด ๋” ํฌ๋‹ค.
  • ๋ฆฌ์•กํŠธ ๊ฐ™์€ ๋ช‡๋ช‡ ํ”„๋กœ์ ํŠธ์—์„œ ๋‹จ์ˆœํžˆ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ๋ชฉ์ ์œผ๋กœ ๊ฐ์ฒด ๋Œ€์‹  ๋ธŒ๋ผ์šฐ์ €์— ๋‚ด์žฅ๋œ ๋งต์œผ๋กœ ์ „ํ™˜ํ•œ ์‚ฌ๋ก€๋„ ์žˆ๋‹ค.
  • ๋จผ์ € ์ƒˆ๋กœ์šด ๋งต ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ช‡ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๋งต์—์„œ๋Š” ํ•ญ์ƒ ๋ช…์‹œ์ ์œผ๋กœ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.
let filters = new Map();
  • ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„์—๋Š” set() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
// filters.set(key, value);
filters.set('๊ฒฌ์ข…', 'ํ† ์ด ํ‘ธ๋“ค');
  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด get() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ธ์ˆ˜๋กœ๋Š” ํ‚ค๋งŒ ์ „๋‹ฌํ•œ๋‹ค.
filters.get('๊ฒฌ์ข…');
// ํ† ์ด ํ‘ธ๋“ค
  • ๊ทœ๋ชจ๊ฐ€ ํฐ ๋งต์„ ๋งŒ๋“ค ๋•Œ๋Š” ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ๋ฅผ ์ฐจ๋ก€๋กœ ์—ฐ๊ฒฐํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ”๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์ฒด์ด๋‹(chaining) ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
let filters = new Map()
.set('๊ฒฌ์ข…', 'ํ† ์ด ํ‘ธ๋“ค')
.set('ํฌ๊ธฐ', '์†Œํ˜•๊ฒฌ')
.set('์ƒ‰์ƒ', '๊ฐˆ์ƒ‰');
filters.get('ํฌ๊ธฐ');
// ์†Œํ˜•๊ฒฌ
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
let filters = new Map(
[
['๊ฒฌ์ข…', 'ํ† ์ด ํ‘ธ๋“ค'],
['ํฌ๊ธฐ', '์†Œํ˜•๊ฒฌ'],
['์ƒ‰์ƒ', '๊ฐˆ์ƒ‰'],
]
)
filters.get('์ƒ‰์ƒ');
// ๊ฐˆ์ƒ‰
  • ๋งต์—์„œ ๊ฐ’์„ ์ œ๊ฑฐํ•  ๋•Œ๋Š” delete() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
filters.delete('์ƒ‰์ƒ');
filters.get('์ƒ‰์ƒ'); // undefined
  • ๋ชจ๋“  ํ‚ค-๊ฐ’ ์Œ์„ ์ œ๊ฑฐํ•  ๋•Œ๋Š” clear() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
filters.clear();
filters.get('์ƒ‰์ƒ'); // undefined
  • ๊ฐ์ฒด ๋Œ€์‹  ๋งต์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๋ช…๋ฃŒํ•˜๊ฒŒ ๋ณด์ธ๋‹ค.
  • ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“  ํ•จ์ˆ˜์™€ ๋น„๊ตํ•ด ๋ณด๋ฉด ํ›จ์”ฌ ํฐ ์ด์ ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋งต ์ธ์Šคํ„ด์Šค์— ํ•ญ์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • delete() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„์—๋Š” ์–ธ์–ด ์ˆ˜์ค€์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์„ž์ง€ ์•Š๋Š”๋‹ค.
    • clear() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ์ด๋Ÿฌํ•œ ์ด์œ  ๋•Œ๋ฌธ์— ์ •๋ณด๋ฅผ ์ž์ฃผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ์ฒด๋ณด๋‹ค ๋งต์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ํŽธ๋ฆฌํ•˜๊ณ  ๋ชจ๋“  ๋™์ž‘๊ณผ ์˜๋„๊ฐ€ ๋งค์šฐ ๋ช…๋ฃŒํ•˜๊ฒŒ ๋ณด์ธ๋‹ค.
  • ๋˜ํ•œ, ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ ํ‚ค์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒํ˜•์— ์ œ์•ฝ์ด ์žˆ๋‹ค.
  • ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€ ์ •์ˆ˜๋ฅผ ํ‚ค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
const errors = {
100: '์ด๋ฆ„์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.',
110: '์ด๋ฆ„์—๋Š” ๋ฌธ์ž๋งŒ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.',
200: '์ƒ‰์ƒ์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.',
};

function isDataVaild(data) {
if(data.length < 10) {
return errors.100
}
}
  • ์œ„ ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์ •์ˆ˜๋ฅผ ํ‚ค๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์  ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • errors[100]์ฒ˜๋Ÿผ ๋ฐฐ์—ด ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ ๋ชจ๋“  ์ •์ˆ˜๊ฐ€ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ํƒ์ƒ‰์— ์•ž์„œ ์ •์ˆ˜๊ฐ€ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.
Object.keys(errors); // ["100", "110", "200"]
  • ๋งต์—๋Š” ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์—†๊ณ  ๋งต์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ž๋ฃŒํ˜•์„ ํ‚ค๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
let errors = new Map([
[100, '์ด๋ฆ„์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'],
[110, '์ด๋ฆ„์—๋Š” ๋ฌธ์ž๋งŒ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.'],
[200, '์ƒ‰์ƒ์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'],
]);
errors.get(100); // "์ด๋ฆ„์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค."
  • ๋งต๋„ ๊ฐ์ฒด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ‚ค๋งŒ ๋ชจ์•„์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋ฐ˜ํ™˜ใ„ท๋‡ ๊ฐ’์€ ๋งต์ดํ„ฐ๋ ˆ์ดํ„ฐ(MapIterator) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ๋งต์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
errors.keys(); // MapIteratorย {100, 110, 200}

๐ŸŽฏ ๋งต๊ณผ ํŽผ์นจ ์—ฐ์‚ฐ์ž๋กœ ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํšŒํ•˜๋ผ.โ€‹

  • ๊ฐ์ฒด๋Š” ์ˆœํšŒํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กญ๋‹ค.
  • ์‹ค์ œ๋กœ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.
  • ๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•  ๋•Œ for ...in๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ์ฒด ํ‚ค ์™ธ์—๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ด์™€ ๋Œ€์กฐ์ ์œผ๋กœ ๋งต์€ ์ง์ ‘ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋งต์€ ์ •๋ ฌ๊ณผ ์ˆœํšŒ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๊ณ , ์ด ๊ธฐ๋Šฅ์€ ๋งต์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ์ผ๋ถ€๋กœ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
const filters = new Map()
.set('์ƒ‰์ƒ', '๊ฐˆ์ƒ‰')
.set('๊ฒฌ์ข…', 'ํ† ์ด ํ‘ธ๋“ค');

function checkFilters(filters) {
for(const entry of filters) {
console.log(entry);
}
}
// ["์ƒ‰์ƒ", "๊ฐˆ์ƒ‰"]
// ["๊ฒฌ์ข…", "ํ† ์ด ํ‘ธ๋“ค"]
  • ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” ํ‚ค-๊ฐ’ ์Œ์„ ๋„˜๊ฒจ์ค€๋‹ค.
  • ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋งต์— ์žˆ๋Š” ํŠน๋ณ„ํ•œ ๋ฉ”์„œ๋“œ์ธ entries() ๋ฉ”์„œ๋“œ๋Š” ๋งต์— ์žˆ๋Š” ํ‚ค-๊ฐ’์„ ์Œ์œผ๋กœ ๋ฌถ์€ ๋งต์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
filters.entries();
// MapIteratorย {"์ƒ‰์ƒ" => "๊ฐˆ์ƒ‰", "๊ฒฌ์ข…" => "ํ† ์ด ํ‘ธ๋“ค"}
  • entries()๋Š” ํ‚ค-๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋งค์šฐ ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ES2017๋ถ€ํ„ฐ ๊ณต์‹์ ์œผ๋กœ ๋ช…์„ธ์— Object์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ Object.entries()๋กœ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
  • Object.entries()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ›จ์”ฌ ๋‹จ์ˆœํ•˜๋ฉด์„œ๋„ ์›๋ž˜์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
function getAppliedFilters(filters) {
const applied = [];
for(const [key, value] of filters) {
applied.push(`${key}: ${value}`);
}
return `์„ ํƒํ•œ ์กฐ๊ฑด์€ ${applied.join(', ')} ์ž…๋‹ˆ๋‹ค.`;
}
// "์„ ํƒํ•œ ์กฐ๊ฑด์€ ์ƒ‰์ƒ: ๊ฐˆ์ƒ‰, ๊ฒฌ์ข…: ํ† ์ด ํ‘ธ๋“ค ์ž…๋‹ˆ๋‹ค."
  • ๋งต์ด ์ˆœ์„œ๋ฅผ ์ €์žฅํ•œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ, ๋‹จ์ ์€ ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ์ •๋ ฌ ๋ฉ”์„œ๋“œ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ์ ์ด๋‹ค.
filters.sort(); // Uncaught TypeError: filters.sort is not a function
  • ํ•˜์ง€๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ํŽผ์นจ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
[...filters];
// [["์ƒ‰์ƒ", "๊ฐˆ์ƒ‰"], ["๊ฒฌ์ข…", "ํ† ์ด ํ‘ธ๋“ค"]]
  • ์—ฌ๊ธฐ์„œ๋Š” ๋ฐฐ์—ด์˜ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋น„๊ต ํ•จ์ˆ˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„๊ต ํ•จ์ˆ˜๊ฐ€ ํ‚ค-๊ฐ’ ์Œ์ด ๋‹ด๊ธด ๋ฐฐ์—ด์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜์ง€๋Š” ์•Š๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ๋น„๊ต ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ์ข€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
function sortByKey(a, b) {
return a[0] > b[0] ? 1 : -1;
}

function getSortedAppliedFilters(filters) {
const applied = [];
for(const [key, value] of [...filters].sort(sortByKey)) {
applied.push(`${key}:${value}`);
}
return `์„ ํƒํ•œ ์กฐ๊ฑด์€ ${applied.join(', ')} ์ž…๋‹ˆ๋‹ค.`;
}
// "์„ ํƒํ•œ ์กฐ๊ฑด์€ ๊ฒฌ์ข…:ํ† ์ด ํ‘ธ๋“ค, ์ƒ‰์ƒ:๊ฐˆ์ƒ‰ ์ž…๋‹ˆ๋‹ค."
  • ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ์ธ map()์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
function getSortedAppliedFilters(filters) {
const applied = [...filters]
.sort(sortByKey)
.map(([key, value]) => {
return `${key}:${value}`;
})
.join(', ');
return `์„ ํƒํ•œ ์กฐ๊ฑด์€ ${applied} ์ž…๋‹ˆ๋‹ค.`;
}
// "์„ ํƒํ•œ ์กฐ๊ฑด์€ ๊ฒฌ์ข…:ํ† ์ด ํ‘ธ๋“ค, ์ƒ‰์ƒ:๊ฐˆ์ƒ‰ ์ž…๋‹ˆ๋‹ค."

๐ŸŽฏ ๋งต ์ƒ์„ฑ ์‹œ ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ํ”ผํ•˜๋ผ.โ€‹

  • ๋งต์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ด์šฉํ•ด ์ž‘์—…ํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋งต์˜ ์‚ฌ๋ณธ์€ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ• ๊นŒ?
    • ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ํ”ผํ•˜๋ฉด์„œ ๋งต์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์€ ์กฐ๊ฑด์— ๋Œ€ํ•ด์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์ ์šฉํ•˜๊ณ , ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ ์šฉํ•˜๋Š” ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์€ ๊ธฐ๋ณธ๊ฐ’์„ ๋ฎ์–ด์จ ๋ณด์ž.
  • ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์œผ๋ฉด ๋งต์— has() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ‚ค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์—†์œผ๋ฉด ํ‚ค๋ฅผ ์„ค์ •ํ•œ๋‹ค. ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ‚ค๋ผ๋ฉด ๋ฌด์‹œํ•˜๋„๋ก ํ•œ๋‹ค.
function applyDefaults(map, defaults) {
for(const [key, value] of defaults) {
if(!map.has(key)){
map.set(key, value);
}
}
}
  • ์ด ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ๊ฐ’๊ณผ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด ์„ฑ๊ณต์ด์ง€๋งŒ, ๊ธฐ๋ณธ๊ฐ’๊ณผ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋กœ ๋ณด์—ฌ์ค„ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ๋ชปํ•˜๋‹ค.
  • ์ด ๋ฌธ์ œ๋ฅผ ์šฐํšŒํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ๋งต์˜ ์‚ฌ๋ณธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.
  • ์•„๋ž˜์™€ ๊ฐ™์ด ํ‚ค-๊ฐ’ ์Œ์ด ๋‹ด๊ธด ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•˜๋ฉด ์ƒˆ๋กœ์šด ๋งต์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ํŽผ์นจ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด์„œ ํ‚ค-๊ฐ’ ์Œ์˜ ๋ชฉ๋ก๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
function applyDefaults(map, defaults) {
const copy = new Map([...map]);
for(const [key, value] of defaults) {
if(!copy.has(key)) {
copy.set(key, value);
}
}
return copy;
}
  • ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ๊ฐ’๊ณผ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ์กฐ๊ฑด์„ ๋ชจ๋‘ ํฌํ•จํ•˜๋ฉด์„œ ๋ถ€์ˆ˜ ํšจ๊ณผ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๋‹ค.
  • ์—ฌ๊ธฐ์„œ ๊ฐ์ฒด ํŽผ์นจ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์„ ํ•ด ๋ณด์ž.
function applyDefaults(map, defaults) {
return new Map([...defaults, ...map]);
}

๐ŸŽฏ ์„ธํŠธ๋ฅผ ์ด์šฉํ•ด ๊ณ ์œณ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๋ผ.โ€‹

  • ์„ธํŠธ(Set)๋Š” ๊ฐ ๊ณ ์œ  ํ•ญ๋ชฉ์„ ํ•˜๋‚˜์”ฉ๋งŒ ๊ฐ–๋Š” ํŠนํ™”๋œ ๋ฐฐ์—ด๊ณผ ๊ฐ™๋‹ค.
  • ์ค‘๋ณต ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” for ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ reduce() ๋ฉ”์„œ๋“œ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
  • for ๋ฌธ ์‚ฌ์šฉํ•  ๋•Œ.
function getUnique(attributes) {
const unique = [];
for(const attribute of attributes) {
if(!unique.includes(attribute)) {
unique.push(attribute);
}
}
return unique;
}
getUnique(['๊ฒ€์ •์ƒ‰','๊ฒ€์ •์ƒ‰','๊ฐˆ์ƒ‰']); // // ["๊ฒ€์ •์ƒ‰", "๊ฐˆ์ƒ‰"]
  • ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ณ ์œณ๊ฐ’๋งŒ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
const colors = ['๊ฒ€์ •์ƒ‰','๊ฒ€์ •์ƒ‰','๊ฐˆ์ƒ‰'];
const unique = new Set(colors);
// Set(2)ย {"๊ฒ€์ •์ƒ‰", "๊ฐˆ์ƒ‰"}
  • ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ ์„ธํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ, ๊ณ ์œ  ์†์„ฑ๋งŒ ๋‹ด๊ธด ๋ฐฐ์—ด์ด๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋งต๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„ธํŠธ์—๋„ ํŽผ์นจ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋งต๊ณผ ๋‹ค๋ฅธ ์ ์€ ์„ธํŠธ๊ฐ€ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ์‹ฌ์ง€์–ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ž๋งˆ์ž ํŽผ์นจ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
function getUnique(attributes) {
return [...new Set(attributes)];
}
getUnique(['๊ฒ€์ •์ƒ‰','๊ฒ€์ •์ƒ‰','๊ฐˆ์ƒ‰']); // ["๊ฒ€์ •์ƒ‰", "๊ฐˆ์ƒ‰"]
  • ์„ธํŠธ๋Š” ๋งต๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฒ€์ฆํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.
  • ์„ธํŠธ์˜ ๊ฒฝ์šฐ ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” add() ๋ฉ”์„œ๋“œ๋ฅผ, ๊ฒ€์ฆํ•  ๋•Œ๋Š” has() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋˜ํ•œ, ์„ธํŠธ์—๋„ ๋งต์ฒ˜๋Ÿผ delete()์™€ clear() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.
  • ์ฆ‰, ์„ธํŠธ์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ๋ฐฐ์—ด์— ๋‹ด์•„ ํ•œ ๋ฒˆ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด์„œ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์„ธํŠธ๋Š” ๊ฐ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ๋งŒ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ธํŠธ์— ์—†๋Š” ๊ฐ’์€ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋ฏธ ์„ธํŠธ์— ์กด์žฌํ•˜๋Š” ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌด์‹œ๋œ๋‹ค.
  • ์ˆœ์„œ๋„ ๋ณด์žฅ๋˜๋ฉด ์ตœ์ดˆ์— ๊ฐ’์ด ์ถ”๊ฐ€๋œ ์œ„์น˜๊ฐ€ ์œ ์ง€๋˜๋ฏ€๋กœ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฐ’์„ ๋‹ค์‹œ ๋„ฃ๋”๋ผ๋„ ์›๋ž˜ ์œ„์น˜๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
let names = new Set();
names.add('joe'); // Set(1)ย {"joe"}
names.add('bea'); // Set(2)ย {"joe", "bea"}
names.add('joe'); // Set(2)ย {"joe", "bea"}
  • ์ด๋ ‡๊ฒŒ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์—์„œ ๊ณ ์œ ํ•œ ์ •๋ณด๋ฅผ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ์œ ํ•œ ํ•ญ๋ชฉ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ƒ‰์ƒ์„ ๋จผ์ € ์ˆ˜์ง‘ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.
function getUniqueColors(dogs) {
const unique = new Set();
for(const dog of dogs) {
unique.add(dog.color);
}
return [...unique];
}
  • ์œ„ ์ฝ”๋“œ๋ฅผ reduce() ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
function getUniqueColors(dogs) {
return [...dogs.reduce((colors, {color}) => colors.add(color), new Set())];
}