๊ตฌ์กฐ๋ถํด ํ ๋น์ด๋?
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๊ฐ