๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/Javascript & NodeJS

[Javascript] ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น

by vodkassi 2021. 6. 5.
728x90

โœจ ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น(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"

 

 

์ฐธ๊ณ  ์ž๋ฃŒ

MDN ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

๋ฒจ๋กœํผํŠธ์™€ ํ•จ๊ป˜ํ•˜๋Š” ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

๋Œ“๊ธ€