โจ ๊ตฌ์กฐ๋ถํด ํ ๋น(Destructuring)์ด๋?
๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ์ ํด์ฒดํ์ฌ ๊ฐ์ ๊ฐ๋ณ ๋ณ์์ ๋ด์ ์ ์๊ฒ ํด์ฃผ๋ ํํ์์ด๋ค. Python ๋ฑ์ ์ธ์ด์๋ ๋์ผํ ๊ธฐ๋ฅ์ด ์กด์ฌํ๋ค.
// ๊ตฌ์กฐ๋ถํด ํ ๋น : ๋ฐฐ์ด
let [a, b] = [1, 2]
console.log(a) // 1
console.log(b) // 2
let x = [1, 2, 3, 4, 5];
let [y, z] = x;
console.log(y); // 1
console.log(z); // 2
// ๊ตฌ์กฐ๋ถํด ํ ๋น : ๊ฐ์ฒด
let {a, b} = {a: 4, b: 10}
console.log(a) // 4
console.log(b) // 10
let {x} = {x: 10}
let {y} = {y: 20}
let z = {x, y}
console.log(z) // {x: 10, y: 20}
๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ํ ๋นํ์ฌ ๋ถํดํ ๊ฐ์ด undefined ์ธ ๊ฒฝ์ฐ ์ฌ์ฉํ ๊ฐ์ ๋ฏธ๋ฆฌ ์ง์ ํ ์ ์๋ค.
let a, b;
[a=5, b=7] = [1]; // ๋๋ {a, b=7} = {a:1}
console.log(a); // 1
console.log(b); // 7
๋ ๋ณ์์ ๊ฐ์ ๊ตํํ ์๋ ์๋ค.
let a = 1;
let b = 3;
[a, b] = [b, a];
console.log(a); // 3
console.log(b); // 1
๊ฐ์ฒด์ ์๋ณธ ํ๋กํผํฐ ๊ฐ์ ๋ถํดํ์ฌ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ ์ ์๋ค.
let o = {p: 42, q: true};
// { ๊ฐ์ฒด ํ๋กํผํฐ: ๋ชฉํ ๋ณ์ }
let {p: foo, q: bar} = o;
console.log(foo); // 42
console.log(bar); // true
console.log(p) // undefined
โจ Rest ๋ฌธ๋ฒ์ด๋?
๋ณ์ ์์ ์ ์ธ ๊ฐ ... ๋ฅผ ๋ถ์์ผ๋ก์จ ๊ตฌ์กฐ๋ถํด ํ ๋น ์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ํ ๋ฒ์ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํ๋ ๋ฌธ๋ฒ์ด๋ค.
// ๊ตฌ์กฐ๋ถํด ํ ๋น + rest ๋ฌธ๋ฒ
let [a, b, ...rest] = [1, 2, 3, 4, 5]
console.log(a) // 1
console.log(b) // 2
console.log(rest) // [3,4,5]
({a, b, ...c} = {a: 10, b: 20, c: 30, d: 40});
console.log(a); // 10
console.log(b); // 20
console.log(c); // {c: 30, d: 40}
โจ Spread ๋ฌธ๋ฒ์ด๋?
Rest ๋ฌธ๋ฒ๊ณผ ๋ฐ๋๋ก ๊ธฐ์กด์ ๋ฐฐ์ด ๋๋ ๊ฐ์ฒด์ ๊ฐ์ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ ๋ ํ์ฉํ๋ค.
const slime = {
name: '์ฌ๋ผ์'
};
const cuteSlime = {
...slime,
attribute: 'cute'
};
const animals = ['๊ฐ', '๊ณ ์์ด', '์ฐธ์'];
const anotherAnimals = [...animals, '๋น๋๊ธฐ'];
์ฃผ์ํ ์
๊ฐ์ฒด ๊ตฌ์กฐ๋ถํด ํ ๋น ์ฐ์ฐ ์ let ๋๋ var ๋ฅผ ํ์ฉํ์ฌ ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ์๊ด ์์ง๋ง, ๊ธฐ์กด์ ์๋ ๋ณ์์ ๋ถํดํ ๊ฐ์ ํ ๋นํ๋ ค ํ๋ค๋ฉด ์ค๊ดํธ {} ๋ฅผ ๊ดํธ () ๋ก ๊ฐ์ธ์ฃผ์ด์ผ ํ๋ค.
(๊ตฌ์กฐ๋ถํด ํ ๋น์ ๋ํด ์์ธํ ์์๋ณด์ง ์๊ณ ๊ทธ๋ฅ ๋๊ฒผ๋๋ ์ค๋ฅ๊ฐ ์ฆ์๋ค (ํนํ ๋ณ์ ์ฌํ ๋น์ ๊ฒฝ์ฐ). ๊ฐ์ฒด ๊ตฌ์กฐ๋ถํด๋ฅผ ํ ๋ ์๋ก์ด ๋ณ์๋ฅผ ์ ์ธํด์ฃผ๋ ๊ฒ์ด ์๋๋ผ ์ฌํ ๋น ํด์ฃผ๋ ๊ฒฝ์ฐ ์ค๊ดํธ {} ์์ ๋ณ์๋ฅผ ๋ด์์ฃผ๊ธฐ๋ง ํ ๊ฒฝ์ฐ js ์์ง์ด ์ด๋ฅผ ์ฝ๋ ๋ธ๋ญ์ผ๋ก ์ธ์ํด ๋๋ ์ค๋ฅ์๋ค.)
let title, width, height;
// Syntax Error
{title, width, height} = {title: "Menu", width: 200, height: 100};
// ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ
({title, width, height} = {title: "Menu", width: 200, height: 100});
์ค์ฒฉ๋ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ถ์ถํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ, ์ค์ฒฉ ๊ตฌ์กฐ ๋ถํด (nested destructuring) ์ ํด์ผ ํ๋ค.
let options = {
size: {
width: 100,
height: 200
},
items: ["Cake", "Donut"],
extra: true
};
let {
size: {
width,
height
},
items: [item1, item2],
} = options;
console.log(size) // not defined
console.log(width) // 100
console.log(title) // "Menu"
์ฐธ๊ณ ์๋ฃ
'๐ป DEV > Javascript & NodeJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript] ์ด๋ฒคํธ ๋ฃจํ (Event Loop) ๋? (0) | 2021.09.07 |
---|---|
[NodeJS] NodeJS ๋ Single Thread ์ผ๊น? Multi Thread ์ผ๊น? (1) | 2021.09.06 |
[Javascript] JSON (0) | 2021.06.05 |
[Javascript] ExpressJS (Intro) (0) | 2021.06.05 |
[Javascript] Fetch API (0) | 2021.05.27 |
๋๊ธ