๐ 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]);
}