์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ค๋ฃจ๋ค๋ณด๋ฉด ๋น๊ตฌ์กฐํ ํ ๋น์ ๋ง์ด ์ ํด๋ณด์ จ์ผ๋ฆฌ๋ผ ์๊ฐ๋ฉ๋๋ค.
๋ฆฌ์กํธ ์คํฐ๋ ์ค mdn web docs ๋ฅผ ๋ณด๋๋ฐ, ๊ธฐ๋ณธ์ ์ธ ๋น๊ตฌ์กฐํ ํ ๋น์ ๋ํ ๊ธ์ ๋ง์ด ๋ดค์ง๋ง ์๋ ๋ด์ฉ์ ๊ดํ ๊ธ์ ๋ณธ ๊ธฐ์ต์ด ์์ด์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
(์ ๊ฐ ๋ชป ๋ณธ ๊ฑธ ์๋,,,)
์ ์ธ ์๋ ํ ๋น
var a, b;
({a, b} = {a: 1, b: 2});
ํ ๋น ๋ฌธ์ ๋๋ฌ์ผ ๊ดํธ()๋ ์ ์ธ ์์ด ๊ฐ์ฒด ๋ฆฌํฐ๋ด(object literal) ๋น๊ตฌ์กฐํ ํ ๋น์ ์ฌ์ฉํ ๋ ํ์ํ ๊ตฌ๋ฌธ์ ๋๋ค.
{a, b} = {a:1, b:2}๋ ์ ํจํ ๋ ๋ฆฝ ๊ตฌ๋ฌธ์ด ์๋๋๋ค. ์ข๋ณ์ {a, b}์ด ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด ์๋ ๋ธ๋ก์ผ๋ก ๊ฐ์ฃผ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ง๋ง, ({a, b} = {a:1, b:2})๋ ์ ํจํ๋ฐ, ํด๋น ๋ฌธ๋ฒ์ var {a, b} = {a:1, b:2}์ ๊ฐ์ต๋๋ค.
๊ดํธ() ํํ์ ์์๋ ์ธ๋ฏธ์ฝ๋ก ์ด ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ด์ ์ค๊ณผ ์ฐ๊ฒฐ๋์ด ํจ์๋ฅผ ์คํํ๋๋ฐ ์ด์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
๊ฐ์ฒด ๋ฆฌํฐ๋ด(object literal) ?
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด๋ ์ค๊ดํธ{}๋ก ๊ฐ์ธ์ง ์์ฑ๋ค(์์ฑ์ด ์๊ฑฐ๋ ์ฌ๋ฌ๊ฐ ์ผ ์ ์์)์ ๋ชฉ๋ก์ ๋๋ค.
const object1 = {} ์ ์ค๋ฅธ์ชฝ ํญ์ธ {}๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด๋ฉฐ,
const object2 = { a: 'a', b: 'b' } ์ ์ค๋ฅธ์ชฝ ํญ์ธ { a: 'a', b: 'b' }๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ๋๋ค.
ํจ์ ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ ๊ฐ ์ค์ ํ๊ธฐ
ES5 ๋ฒ์
ES5 ๋ฒ์ ์์ ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ์ฌ๋ฌ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ์ฌ์ผ ํ์ต๋๋ค.
function drawES5Chart(options) {
options = options === undefined ? {} : options;
var size = options.size === undefined ? 'big' : options.size;
var cords = options.cords === undefined ? { x: 0, y: 0 } : options.cords;
var radius = options.radius === undefined ? 25 : options.radius;
console.log(size, cords, radius);
// ์ด์ ๋๋์ด ์ฐจํธ ๊ทธ๋ฆฌ๊ธฐ ์ํ
}
drawES5Chart({
cords: { x: 18, y: 30 },
radius: 30
});
ES6 ๋ฒ์
ํ์ง๋ง ES6 ๋ฒ์ ์ ๊ตฌ์กฐ๋ถํด ํ ๋น์ ์ด์ฉํ๋ฉด ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์๋์ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
function drawES2015Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = {}) {
console.log(size, cords, radius);
// ์ฐจํธ ๊ทธ๋ฆฌ๊ธฐ ์ํ
}
drawES2015Chart({
cords: { x: 18, y: 30 },
radius: 30
});
์์ drawES2015Chart ํจ์์ ๋งค๊ฐ๋ณ์์์ ๊ตฌ์กฐ ๋ถํด๋ ์ข์ธก ํญ์ ๋น ์ค๋ธ์ ํธ ๋ฆฌํฐ๋ด์ ํ ๋นํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. โก๏ธ {size = 'big', cords = {x: 0, y: 0}, radius = 25} = {}
์ง๊ธ์ ํํ์ ๊ฐ์(์ฐ์ธก ํญ์ ๋น ์ค๋ธ์ ํธ ๋ฆฌํฐ๋ด์ ํ ๋น) ํ์์ ๋จ์ํ drawES2015Chart()์ ๊ฐ์ด ์ด๋ค ๋งค๊ฐ๋ณ์ ์์ด๋ ํธ์ถํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฐ๋ณ์ ๋น ์ค๋ธ์ ํธ ํ ๋น์ ์์ค๋ค๋ฉด, ํจ์ ํธ์ถ ์ ์ ์ด๋ ํ๋์ ์ธ์๊ฐ ์ ๊ณต๋์ด์ผ๋ง ํฉ๋๋ค.
์ด ํจ์๊ฐ ์ด๋ ํ ๋งค๊ฐ๋ณ์ ์์ด๋ ํธ์ถํ ์ ์๊ธธ ์ํ๋ค๋ฉด ์ง๊ธ ํํ๊ฐ ์ ์ฉํ๊ณ , ๋ฌด์กฐ๊ฑด ๊ฐ์ฒด๋ฅผ ๋๊ธฐ๊ธธ ์ํ๋ ๊ฒฝ์ฐ์๋ ๋น ๋ฆฌํฐ๋ด ๊ฐ์ฒด ํ ๋น์ ํ์ง ์๋ ๊ฒ์ด ์ ์ฉํ ์ ์์ต๋๋ค.
์ค์ฒฉ๋ ๊ฐ์ฒด ๋ฐ ๋ฐฐ์ด์ ๊ตฌ์กฐ ๋ถํด
var metadata = {
title: "Scratchpad",
translations: [
{
locale: "de",
localization_tags: [ ],
last_edit: "2014-04-14T08:43:37",
url: "/de/docs/Tools/Scratchpad",
title: "JavaScript-Umgebung"
}
],
url: "/en-US/docs/Tools/Scratchpad"
};
// translations๋ ์ค์ฒฉ๋ ๊ฐ์ฒด๋ฅผ ๊ตฌ์กฐ ๋ถํดํ ๊ฒฐ๊ณผ
var { title: englishTitle, translations: [{ title: localeTitle }] } = metadata;
console.log(englishTitle); // "Scratchpad"
console.log(localeTitle); // "JavaScript-Umgebung"
๊ฐ์ฒด ์์ ๊ฐ์ฒด๊ฐ ์๋ ์ค์ฒฉ๋ ๊ฐ์ฒด ๋ฐ ๋ฐฐ์ด๋ ๊ตฌ์กฐ ๋ถํดํ์ฌ ๋ฐ์ ์ ์์ต๋๋ค.
var { title: englishTitle, translations: [{ title: localeTitle }] } = metadata; ์ ๋ํ ์ค๋ช ์ ์๋์ ๊ฐ์ต๋๋ค.
- title: englishTitle โก๏ธ ๊ฐ์ฒด์ ์๋ title์ englishTitle์ ์ด๋ฆ์ผ๋ก ๋ฐ์ต๋๋ค.
- translations: [{ title: localeTitle }] โก๏ธ ์ฐ์ ๊ฐ์ฒด์ ์๋ translations๋ฅผ ๋ฐ๊ณ [{ }] ๊ตฌ์กฐ์ ๋ค์ด์๋ ๊ฐ title์ localeTitle์ ์ด๋ฆ์ผ๋ก ๋ฐ์ต๋๋ค.
๊ณ์ฐ๋ ์์ฑ ์ด๋ฆ๊ณผ ๊ตฌ์กฐ ๋ถํด
์๋์ ๊ฐ์ด ๋ณ์์ ๊ฐ์ฒด ์์ฑ ์ด๋ฆ์ ๋ฃ์ด์ ๊ตฌ์กฐ ๋ถํดํ ์๋ ์์ต๋๋ค.
let key = "z";
let { [key]: foo } = { z: "bar" };
console.log(foo); // "bar"
์ ์ฝ๋์ { [key]: foo } ๋ถ๋ถ์ด ์ฒ์์๋ ์ดํด๊ฐ ์ ๋์ง ์์์ง๋ง, ๊ฐ์ฒด ์์ฑ์ ์ ๊ทผ ๋ฐฉ์์ ์๊ฐํด๋ณด๋ฉด ์ดํดํ ์ ์์ต๋๋ค.
const a = { b: "b", c: "c" } ๋ผ๋ ๊ฐ์ฒด๊ฐ ์๋ค๋ฉด, ํด๋น ๊ฐ์ฒด ์์ฑ aใ ์ ์ ๊ทผ ๋ฐฉ์์ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ์จ์ .๋ก ์ ๊ทผํ๋ ๋ฐฉ์ : a.b
- ๋ฐฐ์ด์ index ์ ๊ทผ ๋ฐฉ์๊ณผ ๊ฐ์ ๋ฐฉ์ : a["b"]
- ๋ค๋ง ํด๋น ๋๊ดํธ[] ์์๋ ๋ฌธ์์ด์ด ๋ค์ด๊ฐ์ผ ํฉ๋๋ค.
์์ 2๋ฒ์งธ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ตฌ์กฐ๋ถํด ์ฝ๋์ { [key]: foo } ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค.
์ ๋ฐฉ์์ Javascript์ ๋ฐฐ์ด๋ ๊ฒฐ๊ตญ ๋ฐฐ์ด์ ํ๋ด๋ธ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๋ฐฉ์์ ๋๋ค. (์ด ๋ถ๋ถ์ ๊ด๋ จ๋ ๋ด์ฉ์ Javascript ๋ฐฐ์ด ๊ฐ์ฒด ๊ฐ์ ํค์๋๋ก ๊ตฌ๊ตด๋ง ํด๋ณด์๋ฉด ์ฝ๊ฒ ์ฐพ์๋ณด์ค ์ ์์ต๋๋ค.)
๋๊ธ