๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JS

[JavaScript] : ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น [๋ฐฐ์—ด], {๊ฐ์ฒด}, ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ์˜ ํ• ๋‹น.

by ๊ถŒ์Šพํ–„ 2023. 6. 8.

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


๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์ด๋ž€?
ES6๋ฌธ๋ฒ•์ด ์ƒ๊ฒจ๋‚œ ์ดํ›„์— ๋“ฑ์žฅํ•œ ๋ฌธ๋ฒ•
// ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น (destructuring) (de + structure + ing)
// de = not
// structure = ๊ตฌ์กฐ

๊ตฌ์กฐ๋ฅผ ๋ถ„ํ•ดํ•ด์„œ [๋ฐฐ์—ด] ํ˜น์€ {๊ฐ์ฒด} ํ•˜๋‚˜ํ•˜๋‚˜์˜ ์š”์†Œ๋“ค์„ ๋ณ€์ˆ˜๋“ค์— ํ• ๋‹นํ•ด์ฃผ๋Š” ๊ฒƒ.

๋ฐฐ์—ด์—์„œ์˜ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น
[] : ์ˆœ์„œ๊ฐ€ ์ค‘์š”

๊ธฐ๋ณธ๊ฐœ๋… ์˜ˆ์‹œ

var arr = [1, "finger"]; // arr๋ผ๋Š” ๋ฐฐ์—ด์ด ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋Š” 1์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋‘๋ฒˆ์งธ ์š”์†Œ๋Š” "finger"๋ผ๋Š” ๋ฌธ์ž์—ด์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
var[a, b] = arr; // []๋ฐฐ์—ด๋ชจ์–‘์œผ๋กœ ๊ฐ์‹ผ a์™€ b์— arr๋ฅผ ํ• ๋‹นํ•œ๋‹ค๋ฉด??

// ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ํ• ๋‹น์ด ๋œ๋‹ค.
var a = 1, var b = "finger"
var arr = ["value1", "value2", "value3"]; // arr๋ผ๋Š” ๋ฐฐ์—ด์— 3๊ฐœ์˜ ์š”์†Œ๊ฐ€ ๋“ค์–ด์žˆ๊ณ ,
var [a, b, c] = arr; // a,b,c,๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์™ผ์ชฝ๊ณผ ๊ฐ™์ด ์„ ์–ธํ•œ๋‹ค๋ฉด,
console.log(a, b, c); // arr์˜ ์š”์†Œ๋“ค์ด ๊ฐ๊ฐ a,b,c๋ผ๋Š” ๋ณ€์ˆ˜์— ํ•˜๋‚˜ํ•˜๋‚˜ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

// ์ถœ๋ ฅ๊ฐ’
a = value1 b = value2 c = value3
๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ํ†ตํ•ด, ๊ฐ’์„ ํ• ๋‹น ํ•ด์ฃผ๋ ค๋Š” ๋ณ€์ˆ˜์— ๊ฐ’์ด ๋“ค์–ด์˜ค์ง€ ์•Š๋Š”๋‹ค๋ฉด?
var arr = ['value1', 'value2', 'value3']; // ๋Œ€์ž…ํ•ด์ค„ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์€ ์ด 3๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ ,
var [a, b, c, d] = arr; // arr๋กœ๋ถ€ํ„ฐ ์š”์†Œ๋ฅผ ํ• ๋‹น๋ฐ›์„ ๋ณ€์ˆ˜์˜ ์ˆ˜๋Š” 4๊ฐœ์ธ๋ฐ,
console.log(a, b, c, d); // d์˜ ๊ฐ’๋„ ์ฝ˜์†”๋กœ ์ฐ์œผ๋ฉด ๋ญ๊ฐ€ ๋‚˜์˜ฌ๊นŒ?

// ์ถœ๋ ฅ๊ฐ’
value1 value2 value3 undefined

์œ„์˜ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์‹์€ ์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

var a = 'value1'; // ๊ฐ ์š”์†Œ๋“ค์ด ๋ฐฐ์—ด์˜ ์ˆœ์„œ์— ๋งž๊ฒŒ ์ฐจ๋ก€๋Œ€๋กœ a,b,c ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜์—ˆ๊ณ ,
var b = 'value2';
var c = 'value3';
var d; // d๋ผ๋Š” ๋ณ€์ˆ˜์—๋Š” ํ• ๋‹น๋˜๋Š” ๊ฐ’์ด ์—†์œผ๋‹ˆ, d๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ๋งŒ ํ•ด๋†“์€์ฑ„ ์ฝ˜์†”๋กœ ํ™•์ธํ•œ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

// ๊ทธ๋ž˜์„œ d์˜ ์ถœ๋ ฅ๊ฐ’์€ undefined
๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์˜ ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •
// ์œ„์™€ ๊ฐ™์€ ์‹์—์„œ d๋ผ๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๋Š” ๊ฐ’์ด ์—†์–ด๋„, ์ดˆ๊ธฐ๊ฐ’์„ ์žก์•„๋‘”๋‹ค๋ฉด, ์ฝ˜์†”์—์„œ ์ดˆ๊ธฐ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.
// ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์€ ๋ณ€์ˆ˜ ์„ ์–ธ์„ ํ•จ๊ณผ ๋™์‹œ์— []์•ˆ์—์„œ ="data"๋กœ ํ•ด์ค€๋‹ค. ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

var arr = ['value1', 'value2', 'value3'];
var [a, b, c, d=3] = arr;
console.log(a, b, c, d);

// ์œ„ ์ฝ”๋“œ์˜ ์ถœ๋ ฅ๊ฐ’
value1 value2 value3 3

์œ„ ์ฝ”๋“œ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋“ฏ์ด, ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์‹œ ์œ„์™€ ๊ฐ™์€ ์‹์œผ๋กœ ๊ฐ ๋ณ€์ˆ˜์— ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š”๊ฑธ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.

์ดˆ๊ธฐ๊ฐ’์ด ์žˆ๋Š” ๋ณ€์ˆ˜์— ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค๋ฉด?
var arr = ['value1', 'value2', 'value3', 'newData']; // arr์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ์— "newData"๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ  ๋ณ€์ˆ˜์— ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ์ง„ํ–‰ํ•ด๋ณธ๋‹ค.
var [a, b, c, d = 3] = arr;
console.log(a, b, c, d);

// ์ถœ๋ ฅ๊ฐ’ 
value1 value2 value3 newData

์ด์ฒ˜๋Ÿผ ์ดˆ๊ธฐ๊ฐ’์ด ์žกํ˜€์žˆ๋Š” ๋ณ€์ˆ˜๋ผ๊ณ  ํ• ์ง€๋ผ๋„, ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์œผ๋กœ ์ƒˆ๋กœ์šด ๊ฐ’์ด ํ• ๋‹น๋˜๋ฉด, ์ƒˆ๋กญ๋ฐ ๋“ค์–ด์˜จ ๊ฐ’์ด ์ถœ๋ ฅ์ด ๋œ๋‹ค.

๋ฐฐ์—ด ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น ์ •๋ฆฌ
  • ๋ฐฐ์—ด์˜ ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์€, "์ˆœ์„œ"๋Œ€๋กœ ๋ณ€์ˆ˜์— ๋ฐฐ์—ด์š”์†Œ์˜ ๊ฐ’์ด ํ• ๋‹น์ด ๋˜๋ฉฐ,
  • ํ• ๋‹น๋œ ๊ฐ’์ด ์—†์„๋•Œ๋Š”, ํ• ๋‹น์„ ๋ฐ›์ง€ ๋ชปํ•œ ํ•ด๋‹น ๋ณ€์ˆ˜๋Š” undefined๋ฅผ ์ถœ๋ ฅํ•˜๊ณ ,
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ€์ˆ˜์˜ "์ดˆ๊ธฐ๊ฐ’" ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ,
  • ์ดˆ๊ธฐ๊ฐ’์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜์— ๊ฐ’์ด ํ• ๋‹น๋˜์–ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ, ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹น๋œ ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.

๊ฐ์ฒด์—์„œ์˜ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น
{} : key๊ฐ’์ด ์ค‘์š”

๊ธฐ๋ณธ๊ฐœ๋… ์˜ˆ์‹œ

var user = {
    name: 'jhon',
    age: 30,
};            // user๋ผ๋Š” ๊ฐ์ฒด๋Š” key๊ฐ’์œผ๋กœ name๊ณผ age๋ฅผ ๊ฐ–๊ณ ์žˆ๋‹ค.

var { name, age } = user; // ๊ฐ์ฒด์—์„œ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์€ ์„œ๋กœ ๋งž๋Š” key๊ฐ’์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค.

// ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ๋ง๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

var { name, age } = { name: 'jhon', age: 30, };
// ์œ„ ์ฝ”๋“œ๋ฅผ ์ฝ˜์†”๋กœ ์ฐ์–ด๋ณธ๋‹ค๋ฉด

var user = {
    name: 'jhon',
    age: 30,
};

var { name, age } = user;

console.log(name, age);

// ์ถœ๋ ฅ๊ฐ’
jhon 30
์ƒˆ๋กœ์šด key๊ฐ’์œผ๋กœ value๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•
var user = {
    name: 'jhon',
    age: 30,
};
// ์ฒ˜์Œ๊ณผ ๊ฐ™์€ user๋ผ๋Š” ๊ฐ์ฒด๋ฅผ,

var { name: newName, age: newAge } = user; // ์™ผ์ชฝ๊ณผ ๊ฐ™๊ฒŒ ์‹์„ ์งœ์„œ ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ์ง„ํ–‰ํ•ด๋ณด๋ฉด?

console.log(name, age); //name, age๋กœ ์ฝ˜์†”์„ ์ฐ์–ด๋ณธ๋‹ค๋ฉด?
์˜ค๋ฅ˜ ์ถœ๋ ฅ
console.log(name, age); // ์ฝ˜์†”๋กœ๊ทธ์—์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
            ^

ReferenceError: name is not defined   // name ์€ ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์œ„ ์˜ค๋ฅ˜๋กœ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€, ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ์šด key๊ฐ’์œผ๋กœ ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์„ ์ง„ํ–‰ํ•˜๋ฉด,

์ƒˆ๋กœ์šด key์— ๋ฐ์ดํ„ฐ๊ฐ€ ํ• ๋‹น์ด ๋˜๊ณ  ! , ํ• ๋‹น๋œ ๋ฐ์ดํ„ฐ๋Š” ์ƒˆ๋กœ์šด key๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค !

์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค๋Š” ๊ฒƒ์€, ์ •์ƒ์ ์œผ๋กœ ์ƒˆ๋กœ์šด key๊ฐ’์— ๊ฐ’์ด ํ• ๋‹น์ด ์ง„ํ–‰๋˜์—ˆ๋‹ค ๋ผ๋Š”๊ฑธ ์ง์ž‘ํ•ด๋ณผ์ˆ˜ ์žˆ๋‹ค.

์ •ํ™•ํžˆ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด key๊ฐ’์œผ๋กœ ์ฝ˜์†”์„ ์ฐ์–ด๋ณด์ž.

var user = {
    name: 'jhon',
    age: 30,
};

var { name: newName, age: newAge } = user;

console.log(newName, newAge);

// ์ถœ๋ ฅ๊ฐ’
jhon 30
๊ฐ’์ด ํ• ๋‹น๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ์ถœ๋ ฅ์€ ์˜ค๋ฅ˜? undefined?
var user = {
    name: 'jhon',
    age: 30,
};             // name๊ณผ age๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ๊ฐ์ฒด user์—์„œ

var { name, age, gender } = user; // gender๋ผ๋Š” ์ƒˆ๋กœ์šด key๋ฅผ ์ถ”๊ฐ€ํ•ด ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์„ ์ง„ํ–‰ํ•˜๋ฉด,

console.log(name, age, gender);

// ์ถœ๋ ฅ๊ฐ’
jhon 30 undefined
// gender์˜ ๊ฐ’์€ ๋‹น์—ฐํ•˜๊ฒŒ๋„ undefined๊ฐ€ ์ถœ๋ ฅ
์ดˆ๊ธฐ๊ฐ’ ์„ค์ •
var user = {
    name: 'jhon',
    age: 30,
};

var { name, age, gender = 'male' } = user; // ๋ฐฐ์—ด๊ณผ ๊ฐ™์€๋ฐฉ์‹์œผ๋กœ = ์„ ์‚ฌ์šฉํ•ด ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

console.log(name, age, gender);

// ์ถœ๋ ฅ๊ฐ’ 
jhon 30 male
์ดˆ๊ธฐ๊ฐ’์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜์— ๋ฐ์ดํ„ฐ๊ฐ€ ํ• ๋‹น๋  ๊ฒฝ์šฐ
var user = {
    name: 'jhon',
    age: 30,
    gender: 'female',
};

var { name, age, gender = 'male' } = user;

console.log(name, age, gender);

// ์ถœ๋ ฅ๊ฐ’
jhon 30 female

์œ„์™€ ๊ฐ™์ด ์ดˆ๊ธฐ๊ฐ’์€ ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ์— ์˜ํ•ด์„œ ์‚ฌ๋ผ์ง€๊ณ  ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹น๋œ ๊ฐ’์ด ์ถœ๋ ฅ๋˜๊ฒŒ ๋œ๋‹ค.

๊ฐ์ฒด ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น ์ •๋ฆฌ
  • ๊ฐ์ฒด์—์„œ์˜ ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์€ key๊ฐ’์ด ์ œ์ผ ์ค‘์š”ํ•˜๋ฉฐ,
  • ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๊ณ ,
  • ์ดˆ๊ธฐ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋”๋ผ๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ํ• ๋‹น์ด ๋˜๊ฒŒ๋˜๋ฉด, ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹น๋œ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.
  • ๋˜ํ•œ ์ƒˆ๋กœ์šด key๊ฐ’์„ ๊ฐ€์งˆ ๋•Œ name์ด๋ผ๋Š” key๊ฐ’์œผ๋กœ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ "๋ถˆ๋Ÿฌ์™”๊ณ ", ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ช…์ธ newName์— "name์ด ๋ถˆ๋Ÿฌ์˜จ" ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์ด ํ• ๋‹น๋˜๋Š” ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

 

#์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ #๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น #์ดˆ๊ธฐ๊ฐ’ #์ƒˆ๋กœ์šด_key๊ฐ’์—_ํ• ๋‹น๊ฐ€๋Šฅ #๊ฐ์ฒด #๋ฐฐ์—ด #์ˆœ์„œ์™€_key๊ฐ’