![[JavaScript] ๊ตฌ์กฐ ๋ถํด ํ ๋น(Destructuring)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx5OM8%2FbtsGPoLr0py%2FYniusozuKGucdmNLD0xK6K%2Fimg.png)
๐ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ด๋ ๋ฌด์์ธ๊ฐ์?
๊ตฌ์กฐ ๋ถํด ํ ๋น์ ๋ณต์กํ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ์ฌ, ์ด๋ฅผ ์๋ก์ด ๋ณ์์ ๊ฐ๋จํ ํ ๋นํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํํ์์ด์์. ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ๋ ๊น๋ํ๊ณ ๊ฐ๋ ์ฑ ์๊ฒ ์์ฑํ ์ ์์ด์.
๋น์ ๋ฅผ ๋ค์ด๋ณด์๋ฉด, ํ ์์์ ์ฌ๋ฌ ๊ฐ์ง ๊ณผ์ผ์ด ๋ค์ด ์์ ๋, ๊ฐ ๊ณผ์ผ์ ํ๋์ฉ ๊บผ๋ด์ ๋ฐ๋ก๋ฐ๋ก ์ ์์ ๋ด๋ ๊ฒ๊ณผ ๋น์ทํด์. ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์ด๋ฌํ ๊ณผ์ ์ ์ฝ๋ ์์์ ๋งค์ฐ ์ฌํํ๊ฒ ํด์ค๋๋ค.
๐ฅ๏ธ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์ข ๋ฅ
๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์ฃผ๋ก ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด์์ ์ฌ์ฉ๋ผ์.
1. ๋ฐฐ์ด์ ๊ตฌ์กฐ ๋ถํด ํ ๋น
- ๋ฐฐ์ด์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ๋ฐฐ์ด์ ์์๋ค์ ๋ณ์์ ํ ๋นํ ๋ ์ฌ์ฉ๋ผ์. ์์๋๋ก ํ ๋น๋๋ฉฐ, ์ํ๋ ์์๋ง ์ ํ์ ์ผ๋ก ์ถ์ถํ ์๋ ์์ด์.
const fruits = ["์ฌ๊ณผ", "๋ฐ๋๋", "์ฒด๋ฆฌ"];
const [apple, banana, cherry] = fruits;
console.log(apple, banana, cherry); // ์ฌ๊ณผ, ๋ฐ๋๋, ์ฒด๋ฆฌ
์ด ์ฝ๋์์๋ 'fruits' ๋ฐฐ์ด์์ ๊ฐ ์์๋ฅผ ์์๋๋ก 'apple', 'banana', 'cherry' ๋ณ์์ ํ ๋นํฉ๋๋ค.
2. ๊ฐ์ฒด์ ๊ตฌ์กฐ ๋ถํด ํ ๋น
- ๊ฐ์ฒด์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ๊ฐ์ฒด์ ์์ฑ์ ๊ฐ์ ์ด๋ฆ์ ๋ณ์์ ํ ๋นํ ๋ ์ฌ์ฉ๋ผ์. ์ด ๋, ์์ฑ๋ช ๊ณผ ๋ณ์๋ช ์ด ์ผ์นํด์ผ ํฉ๋๋ค.
const person = { name: "์งํธ", age: 28, job: "๊ฐ๋ฐ์" };
const { name, age, job } = person;
console.log(name, age, job); // ์งํธ, 28, ๊ฐ๋ฐ์
์ด ์ฝ๋์์๋ 'person' ๊ฐ์ฒด์ ๊ฐ ์์ฑ์ 'name', 'age', 'job' ๋ณ์์ ํ ๋นํฉ๋๋ค.
3. ๋น์ด์๋ ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด์์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น
๋น์ด์๋ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์ฌ์ฉํ ๋๋ ์ฃผ์๊ฐ ํ์ํด์. ๊ธฐ๋ณธ์ ์ผ๋ก ํ ๋นํ ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์, ๊ฐ ๋ณ์๋ undefined
๋ก ํ ๋น๋๊ฒ ์ง๋ง, ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ์ ์์ด์.
- ๋น์ด์๋ ๋ฐฐ์ด์์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น: ๋น์ด์๋ ๋ฐฐ์ด์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ํ ๋๋ ๊ฐ ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ข์์. ์ด๋ ๊ฒ ํ๋ฉด ๊ธฐ๋ณธ๊ฐ์ด ๋ณ์์ ํ ๋น๋์ด
undefined
๋ฅผ ๋ฐฉ์งํ ์ ์์ด์.
const fruits = [];
const [apple = '์ฌ๊ณผ', banana = '๋ฐ๋๋', cherry = '์ฒด๋ฆฌ'] = fruits;
console.log(apple, banana, cherry); // ์ฌ๊ณผ, ๋ฐ๋๋, ์ฒด๋ฆฌ
์ด ์์ ์์๋ ๋น ๋ฐฐ์ด 'fruits'์์ ๊ฐ์ ์ถ์ถํ๋ ค๊ณ ์๋ํ๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ์ด ๊ฐ ๋ณ์์ ํ ๋น๋ฉ๋๋ค.
- ๋น์ด์๋ ๊ฐ์ฒด์์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น: ๊ฐ์ฒด๊ฐ ๋น์ด ์๊ฑฐ๋, ๊ธฐ๋ํ๋ ์์ฑ์ด ์์ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ์ ์์ด์. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ํ๋ก๊ทธ๋จ์ด ์์๋๋ก ์๋ํ๊ฒ ํ ์ ์์ด์.
const person = {};
const { name = "์ด๋ฆ ๋ฏธ์ ", age = 0, job = "์ง์
๋ฏธ์ " } = person;
console.log(name, age, job); // ์ด๋ฆ ๋ฏธ์ , 0, ์ง์
๋ฏธ์
์ด ์ฝ๋์์๋ 'person' ๊ฐ์ฒด์ 'name', 'age', 'job' ์์ฑ์ด ์์ผ๋ฏ๋ก, ๊ฐ ๋ณ์์ ์ค์ ๋ ๊ธฐ๋ณธ๊ฐ์ด ํ ๋น๋ฉ๋๋ค.
๐ค ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ํ์ฉ ์
๊ตฌ์กฐ ๋ถํด ํ ๋น์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ค๋ฃจ๊ณ ์ถ์ ๋ ์์ฃผ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ด์. ํนํ ํจ์์์ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ฐํํ ๋, ์ด๋ฅผ ๊ฐํธํ๊ฒ ๋ค๋ฃจ๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์ด์์.
1. ํจ์์์ ๋ฐฐ์ด ๋ฐํ ์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น
function getScores() {
return [70, 80, 90];
}
const [math, science, english] = getScores();
console.log(math, science, english); // 70, 80, 90
'getScores' ํจ์๋ ์ธ ๊ณผ๋ชฉ์ ์ ์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํ๋ฉฐ, ์ด๋ฅผ ๊ฐ ๊ณผ๋ชฉ๋ช ์ ํด๋นํ๋ ๋ณ์์ ํ ๋นํฉ๋๋ค.
2. ํจ์์์ ๊ฐ์ฒด ๋ฐํ ์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น
function getUser() {
return { name: "ํ๋", age: 24, job: "๋์์ด๋" };
}
const { name, age, job } = getUser();
console.log(name, age, job); // ํ๋, 24, ๋์์ด๋
'getUser' ํจ์๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ฒด๋ก ๋ฐํํ๋ฉฐ, ์ด๋ฅผ ๊ฐ๋ณ ๋ณ์์ ๊ตฌ์กฐ ๋ถํด ํ ๋นํ์ฌ ๊ฐํธํ๊ฒ ์ ๊ทผํฉ๋๋ค.
3. ํจ์์์ ์ฌ๋ฌ ๋ฐ์ดํฐ ํฌ์ธํธ ๋ฐํ ์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น
function getContactInfo() {
return {
name: "์คํธ",
address: {
street: "123 Maple St",
city: "Seoul",
zipCode: "12345"
},
contact: {
email: "junho@example.com",
phone: "010-1234-5678"
}
};
}
const {
name,
address: { street, city, zipCode },
contact: { email, phone }
} = getContactInfo();
console.log(name); // ์คํธ
console.log(street); // 123 Maple St
console.log(city); // Seoul
console.log(zipCode); // 12345
console.log(email); // junho@example.com
console.log(phone); // 010-1234-5678
'getContactInfo' ํจ์๋ ์ฌ์ฉ์์ ๊ธฐ๋ณธ ์ ๋ณด, ์ฃผ์, ์ฐ๋ฝ์ฒ ์ ๋ณด๋ฅผ ํฌํจํ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
์ด ๊ฐ์ฒด์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์ฌ์ฉํ์ฌ ์ด๋ฆ, ์ฃผ์์ ๊ฐ ์์(๊ฑฐ๋ฆฌ, ๋์, ์ฐํธ๋ฒํธ), ์ฐ๋ฝ์ฒ์ ๊ฐ ์์(์ด๋ฉ์ผ, ์ ํ๋ฒํธ)๋ฅผ ๊ฐ๊ฐ์ ๋ณ์๋ก ์ง์ ํ ๋นํ์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ค์ฒฉ๋ ๊ฐ์ฒด ๊ตฌ์กฐ์์๋ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊น๋ํ๊ฒ ์ถ์ถํ ์ ์์ต๋๋ค.
๐จ ์ฃผ์ํ ์
- ์กด์ฌํ์ง ์๋ ์์ฑ ์ ๊ทผ: ๊ฐ์ฒด์์ ์กด์ฌํ์ง ์๋ ์์ฑ์ ์ ๊ทผํ๋ ค ํ ๋๋ undefined๊ฐ ํ ๋น๋๋ฏ๋ก, ์ ์ ํ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ๋ ๊ฒ์ด ์ข์์.
- ๋๋ฌด ๊น์ ๊ตฌ์กฐ ๋ถํด: ๋งค์ฐ ๊น์ ๊ตฌ์กฐ์ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๊ตฌ์กฐ ๋ถํด ํ ๋นํ ๋๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ์ ์์ผ๋ ์ฃผ์ํด์ผ ํด์.
๐ ๊ฒฐ๋ก
๊ตฌ์กฐ ๋ถํด ํ ๋น์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ ํ๋ฅญํ ๋๊ตฌ์์. ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ก๋ถํฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ถ์ถํ ์ ์์ด, ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ด์.
๐ ์ถ๊ฐ ์ ๋ณด
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ๋ํ ๋ ๊น์ ์ดํด๋ฅผ ์ํ์ ๋ค๋ฉด, MDN Web Docs์์ ์์ธํ ์ ๋ณด๋ฅผ ์ฐพ์๋ณผ ์ ์์ด์.
'Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ๋ฐฐ์ด ๋ฉ์๋(map, filter, reduce) (3) | 2024.10.13 |
---|---|
[JavaScript] ํ์ดํ ํจ์์ ์ผ๋ฐ ํจ์์ ์ฐจ์ด (0) | 2024.10.02 |
[JavaScript] ํด๋ก์ (0) | 2024.03.23 |
[JavaScript] this (1) | 2024.03.18 |
[JavaScript] ES6 (0) | 2024.01.25 |
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!