Destructuring Assignment

henuยท2022๋…„ 12์›” 30์ผ
post-thumbnail

Destructuring Assignment


๐Ÿ“ข Destructuring Assignment๋Š” ๋ฐฐ์—ด, ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์€ Iterable ๋˜๋Š” ๊ฐ์ฒด๋ฅผ destructuring(๊ตฌ์กฐ ํŒŒ๊ดด)ํ•˜์—ฌ 1๊ฐœ ์ด์ƒ์˜ ๋ณ€์ˆ˜์— ๊ฐœ๋ณ„์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

Array Destructuring Assignment


๋ฐฐ์—ด destructuring assignment์˜ ๋Œ€์ƒ์€ iterable์ด์–ด์•ผ ํ•˜๋ฉฐ, ํ• ๋‹น ๊ธฐ์ค€์€ index์ด๋‹ค.

์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋œ๋‹ค.

const arr = [1, 2, 3];

// ๋ณ€์ˆ˜ a, b, c๋ฅผ ์„ ์–ธํ•˜๊ณ  ๋ฐฐ์—ด arr๋ฅผ destructuringํ•˜์—ฌ ํ• ๋‹นํ•œ๋‹ค.
const [a, b, c] = arr;

console.log(a, b, c); // 1, 2, 3

๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜์™€ ์ดํ„ฐ๋Ÿฌ๋ธ”์˜ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•  ํ•„์š”๋Š” ์—†๋‹ค.

const [a, b] = [1];
console.log(a, b); // 1 undefined

const [c, d] = [1, 2, 3];
console.log(c, d); // 1 2

const [e, ,f] = [1, 2, 3];
console.log(e, f); // 1 3

๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

const [a, b, c = 5] = [1, 2];
console.log(a, b, c); // 1 2 5

// ๊ธฐ๋ณธ๊ฐ’๋ณด๋‹ค ํ• ๋‹น๊ฐ’์ด ์šฐ์„ ์‹œ ๋œ๋‹ค.
const [d, e, f = 6] = [1, 2, 3];
console.log(d, e, f); // 1 2 3

๐Ÿ’ก ๋ฐฐ์—ด์„ arguement๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜์˜ parameter์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

const arr = [1, 2, 3];

function print([a, b]) {
  return `์ฒซ ๋ฒˆ์งธ๋Š” ${a}์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” ${b}์ด๋‹ค.`;
}

print(arr); // '์ฒซ ๋ฒˆ์งธ๋Š” 1์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” 2์ด๋‹ค.'

๋ณ€์ˆ˜์— Rest parameter์™€ ์œ ์‚ฌํ•˜๊ฒŒ Rest element๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.

const [a, ...b] = [1, 2, 3, 4];
console.log(a, b); // 1 [2, 3, 4]

Object Destructuring Assignment


๊ฐ์ฒด destructuring assignment์˜ ๋Œ€์ƒ์€ object์ด์–ด์•ผ ํ•˜๋ฉฐ, ํ• ๋‹น ๊ธฐ์ค€์€ property์˜ key์ด๋‹ค.

์ˆœ์„œ๋Š” ์˜๋ฏธ ์—†๊ณ  ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ํ• ๋‹น๋œ๋‹ค.

const obj = { name: 'kim', age: 10 };

// ๋ณ€์ˆ˜ name, age๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ฐ์ฒด obj๋ฅผ destructuringํ•˜์—ฌ ํ• ๋‹นํ•œ๋‹ค.
const {name, age} = obj;

console.log(name, age); // 'kim' 10

๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

const obj = { name: 'kim', age: 10 };

const { name, age, gender = 'male' } = obj;
console.log(name, age, gender); // 'kim' 10 'male'

// ๊ธฐ๋ณธ๊ฐ’๋ณด๋‹ค ํ• ๋‹น๊ฐ’์ด ์šฐ์„ ์‹œ ๋œ๋‹ค.
const { name = 'park', age } = obj;
console.log(name, age); // 'kim' 10

๐Ÿ’ก ๊ฐ์ฒด๋ฅผ arguement๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜์˜ parameter์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

const obj = { name: 'kim', age: 10 };

function print({ name, age }) {
  return `์ด๋ฆ„์€ ${name}์ด๊ณ  ๋‚˜์ด๋Š” ${age}์ด๋‹ค.`;
}

print(obj); // '์ด๋ฆ„์€ kim์ด๊ณ  ๋‚˜์ด๋Š” 10์ด๋‹ค.'

๋ฐฐ์—ด ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น๊ณผ ๊ฐ์ฒด ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ํ˜ผ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

const list = [
  { id: 1, name: 'kim', age: 10 },
  { id: 2, name: 'park', age: 7 },
  { id: 3, name: 'lee', age: 12 },
];

const [, , { name }] = list;
console.log(name); // 'lee'

์ค‘์ฒฉ ๊ฐ์ฒด์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

const person = {
  name: 'kim',
  address: {
    country: 'korea',
    city: 'seoul',
  },
};

// address ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ๊ฐ์ฒด๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์ด ๊ฐ์ฒด์˜ city ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ๊ฐ’์„ ์ถ”์ถœํ•œ๋‹ค.
const {
  address: { city },
} = person;
console.log(city); // 'seoul'

๋ณ€์ˆ˜์— Rest parameter์™€ ์œ ์‚ฌํ•˜๊ฒŒ Rest property๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.

const obj = {
  a: 1,
  b: 2,
  c: 3,
  d: 4,
};

const { a, ...rest } = obj;
console.log(a, rest); // 1 { b: 2, c: 3, d: 4 }

String ๋˜ํ•œ iterable์ด๋ฏ€๋กœ destructuring assignment์˜ ๋Œ€์ƒ์ด๋‹ค.

const str = 'abcdefg';
const [first, second] = str;
console.log(first, second); // 'a' 'b'

0๊ฐœ์˜ ๋Œ“๊ธ€