ํฐ์คํ ๋ฆฌ ๋ทฐ
[JavaScript] ๋์คํธ๋ญ์ฒ๋ง ํ ๋น
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 8. 6. 18:50๋์คํธ๋ญ์ฒ๋ง ํ ๋น(destructuring assignment, ๊ตฌ์กฐ ๋ถํด ํ ๋น)์ ๊ตฌ์กฐํ๋ ๋ฐฐ์ด๊ณผ ๊ฐ์ ์ดํฐ๋ฌ๋ธ ๋๋ ๊ฐ์ฒด๋ฅผ destructuring(๋น๊ตฌ์กฐํ, ๊ตฌ์กฐ ํ๊ดด)ํ์ฌ 1๊ฐ ์ด์์ ๋ณ์์ ๊ฐ๋ณ์ ์ผ๋ก ํ ๋นํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
๋ฐฐ์ด๊ณผ ๊ฐ์ ์ดํฐ๋ฌ๋ธ ๋๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์์ ํ์ํ ๊ฐ๋ง ์ถ์ถํ์ฌ ๋ณ์์ ํ ๋นํ ๋ ์ ์ฉํฉ๋๋ค.
๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น
๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๋ฐฐ์ด๋ก๋ถํฐ ์ถ์ถํ์ฌ 1๊ฐ ์ด์์ ๋ณ์์ ํ ๋นํ ๋, ๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น์ ๋์(ํ ๋น๋ฌธ์ ์ฐ๋ณ)์ ์ดํฐ๋ฌ๋ธ์ด์ด์ผ ํ๋ฉฐ, ํ ๋น ๊ธฐ์ค์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค์ ๋๋ค.
// ES6
const arr = [1, 2, 3];
// ES6 ๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น
// ๋ณ์ one, two, three๋ฅผ ์ ์ธํ๊ณ ๋ฐฐ์ด arr์ ๋์คํธ๋ญ์ฒ๋งํ์ฌ ํ ๋นํ๋ค.
// ์ด๋ ํ ๋น ๊ธฐ์ค์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ค.
const [one, two, three] = arr;
console.log(one, two, three); // 1 2 3
// ES5
var arr = [1, 2, 3];
var one = arr[0];
var two = arr[1];
var three = arr[2];
console.log(one, two, three); // 1 2 3
๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น์ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ํ ๋น ์ฐ์ฐ์ ์ผ์ชฝ์ ๊ฐ์ ํ ๋น๋ฐ์ ๋ณ์๋ฅผ ๋ฐฐ์ด ๋ฆฌํฐ๋ด ํํ๋ก ์ ์ธํด์ผ ํจ
- ์ฐ๋ณ์ ์ดํฐ๋ฌ๋ธ์ ํ ๋นํ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์
- ์ ์ธ๊ณผ ํ ๋น์ ๋ถ๋ฆฌํ ์๋ ์์ง๋ง, const ํค์๋๋ก ๋ณ์๋ฅผ ์ ์ธํ ์ ์์ผ๋ฏ๋ก ๊ถ์ฅ X
- ํ ๋น์ ๊ธฐ์ค์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ผ ์์๋๋ก ํ ๋น๋จ (๋ณ์์ ๊ฐ์์ ์ดํฐ๋ฌ๋ธ์ ์์ ๊ฐ์๊ฐ ์ผ์นํ์ง ์์๋ ๋จ)
- ํ ๋น์ ์ํ ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ์ ์์
- ํ ๋น์ ์ํ ๋ณ์์ Rest ํ๋ผ๋ฏธํฐ์ ์ ์ฌํ๊ฒ Rest ์์ ... ์ ์ฌ์ฉํ ์ ์์ (Rest ์์๋ ๋ฐ๋์ ๋ง์ง๋ง์ ์์น)
// 1. ๋ณ์ ์ ์ธ๊ณผ ํ ๋น
const [x, y] = [1, 2];
// 2. ์ฐ๋ณ์ ์ดํฐ๋ฌ๋ธ์ ํ ๋นํด์ผ ํจ
const [x, y]; // SyntaxError: Missing initializer in destructuring declaration
const [a, b] = {}; // TypeError: {} is not iterable
// 3. ๋ณ์ ์ ์ธ์ ํ ๋น ๋ถ๋ฆฌ
let x, y;
[x, y] = [1, 2];
// 4. ํ ๋น์ ๊ธฐ์ค์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ผ ์์๋๋ก ํ ๋น๋จ
const [a, b] = [1, 2];
console.log(a, b); // 1 2
const [c, d] = [1];
console.log(c, d); // 1 undefined
const [e, f] = [1, 2, 3];
console.log(e, f); // 1 2
const [g, , h] = [1, 2, 3];
console.log(g, h); // 1 3
// 5. ํ ๋น์ ์ํ ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ์ ์์
// ๊ธฐ๋ณธ๊ฐ
const [a, b, c = 3] = [1, 2];
console.log(a, b, c); // 1 2 3
// ๊ธฐ๋ณธ๊ฐ๋ณด๋ค ํ ๋น๋ ๊ฐ์ด ์ฐ์ ํ๋ค.
const [e, f = 10, g = 3] = [1, 2];
console.log(e, f, g); // 1 2 3
// 6. ํ ๋น์ ์ํ ๋ณ์์ Rest ์์ ... ์ ์ฌ์ฉ
// Rest ์์
const [x, ...y] = [1, 2, 3];
console.log(x, y); // 1 [ 2, 3 ]
์ด์ฒ๋ผ ๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น์ ๋ฐฐ์ด๊ณผ ๊ฐ์ ์ดํฐ๋ฌ๋ธ์์ ํ์ํ ์์๋ง ์ถ์ถํ์ฌ ๋ณ์์ ํ ๋นํ๊ณ ์ถ์ ๋ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด URL์ ํ์ฑํ์ฌ ๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น์ผ๋ก protocol, host, path ํ๋กํผํฐ๋ฅผ ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํด ๋ฐํํ ์ ์์ต๋๋ค.
// url์ ํ์ฑํ์ฌ protocol, host, path ํ๋กํผํฐ๋ฅผ ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํด ๋ฐํํ๋ค.
function parseURL(url = '') {
// '://' ์์ ๋ฌธ์์ด(protocol)๊ณผ '/' ์ด์ ์ '/'์ผ๋ก ์์ํ์ง ์๋ ๋ฌธ์์ด(host)๊ณผ '/' ์ดํ์ ๋ฌธ์์ด(path)์ ๊ฒ์ํ๋ค.
const parsedURL = url.match(/^(\w+):\/\/([^/]+)\/(.*)$/);
console.log(parsedURL);
/*
[
'https://developer.mozilla.org/ko/docs/Web/JavaScript',
'https',
'developer.mozilla.org',
'ko/docs/Web/JavaScript',
index: 0,
input: 'https://developer.mozilla.org/ko/docs/Web/JavaScript',
groups: undefined
]
*/
if (!parsedURL) return {};
// ๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น์ ์ฌ์ฉํ์ฌ ์ดํฐ๋ฌ๋ธ์์ ํ์ํ ์์๋ง ์ถ์ถํ๋ค.
const [, protocol, host, path] = parsedURL;
return { protocol, host, path };
}
const parsedURL = parseURL('https://developer.mozilla.org/ko/docs/Web/JavaScript');
console.log(parsedURL);
/*
{
protocol: 'https',
host: 'developer.mozilla.org',
path: 'ko/docs/Web/JavaScript'
}
*/
๊ฐ์ฒด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น
๊ฐ์ฒด์ ๊ฐ ํ๋กํผํฐ๋ฅผ ๊ฐ์ฒด๋ก๋ถํฐ ์ถ์ถํ์ฌ 1๊ฐ ์ด์์ ๋ณ์์ ํ ๋นํ ๋, ๊ฐ์ฒด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น์ ๋์(ํ ๋น๋ฌธ์ ์ฐ๋ณ)์ ๊ฐ์ฒด์ด์ด์ผ ํ๋ฉฐ, ํ ๋น ๊ธฐ์ค์ ํ๋กํผํฐ ํค์ ๋๋ค. ์ฆ, ์์๋ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ ์ ์ธ๋ ๋ณ์ ์ด๋ฆ๊ณผ ํ๋กํผํฐ ํค๊ฐ ์ผ์นํ๋ฉด ํ ๋น๋ฉ๋๋ค.
// ES6
const user = { firstName: 'Ungmo', lastName: 'Lee' };
// ES6 ๊ฐ์ฒด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น
// ๋ณ์ lastName, firstName์ ์ ์ธํ๊ณ user ๊ฐ์ฒด๋ฅผ ๋์คํธ๋ญ์ฒ๋งํ์ฌ ํ ๋นํ๋ค.
// ์ด๋ ํ๋กํผํฐ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์คํธ๋ญ์ฒ๋ง ํ ๋น์ด ์ด๋ฃจ์ด์ง๋ค. ์์๋ ์๋ฏธ๊ฐ ์๋ค.
const { lastName, firstName } = user;
console.log(firstName, lastName); // Ungmo Lee
// ES5
var user = { firstName: 'Ungmo', lastName: 'Lee' };
var firstName = user.firstName;
var lastName = user.lastName;
console.log(firstName, lastName); // Ungmo Lee
๊ฐ์ฒด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น์ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ํ ๋น ์ฐ์ฐ์ ์ผ์ชฝ์ ํ๋กํผํฐ ๊ฐ์ ํ ๋น๋ฐ์ ๋ณ์๋ฅผ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ํํ๋ก ์ ์ธํด์ผ ํจ
- ์ฐ๋ณ์ ๊ฐ์ฒด ๋๋ ๊ฐ์ฒด๋ก ํ๊ฐ๋ ์ ์๋ ํํ์(๋ฌธ์์ด, ์ซ์, ๋ฐฐ์ด)์ ํ ๋นํ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์
- ํ ๋น์ ์ํ ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ์ ์์
- ๊ฐ์ฒด์์ ํ๋กํผํฐ ํค๋ก ํ์ํ ํ๋กํผํฐ ๊ฐ๋ง ์ถ์ถํ์ฌ ๋ณ์์ ํ ๋นํ ๋ ์ ์ฉํจ
- ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ๋ ํจ์์ ๋งค๊ฐ๋ณ์์ ์ฌ์ฉํ ์ ์์
- ํ ๋น์ ์ํ ๋ณ์์ Rest ํ๋ผ๋ฏธํฐ์ ์ ์ฌํ๊ฒ Rest ์์ ... ์ ์ฌ์ฉํ ์ ์์ (Rest ์์๋ ๋ฐ๋์ ๋ง์ง๋ง์ ์์น)
// 1. ๋ณ์ ์ ์ธ
const { lastName, firstName } = { firstName: 'Ungmo', lastName: 'Lee' };
const { lastName, firstName };
// SyntaxError: Missing initializer in destructuring declaration
const { lastName, firstName } = null;
// TypeError: Cannot destructure property 'lastName' of 'null' as it is null.
// 2. ๊ธฐ๋ณธ๊ฐ ์ค์
const { firstName = 'Ungmo', lastName } = { lastName: 'Lee' };
console.log(firstName, lastName); // Ungmo Lee
const { firstName: fn = 'Ungmo', lastName: ln } = { lastName: 'Lee' };
console.log(fn, ln); // Ungmo Lee
// 3. ํค๋ก ๊ฐ ์ถ์ถ
const str = 'Hello';
// String ๋ํผ ๊ฐ์ฒด๋ก๋ถํฐ length ํ๋กํผํฐ๋ง ์ถ์ถํ๋ค.
const { length } = str;
console.log(length); // 5
const todo = { id: 1, content: 'HTML', completed: true };
// todo ๊ฐ์ฒด๋ก๋ถํฐ id ํ๋กํผํฐ๋ง ์ถ์ถํ๋ค.
const { id } = todo;
console.log(id); // 1
// 4. ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ๋ ๋งค๊ฐ๋ณ์์ ํ์ฉ
function printTodo({ content, completed }) {
console.log(`ํ ์ผ ${content}์ ${completed ? '์๋ฃ' : '๋น์๋ฃ'} ์ํ์
๋๋ค.`);
}
printTodo({ id: 1, content: 'HTML', completed: true });
// ํ ์ผ HTML์ ์๋ฃ ์ํ์
๋๋ค.
// 5. Rest ํ๋กํผํฐ
const { x, ...rest } = { x: 1, y: 2, z: 3 };
console.log(x, rest); // 1 { y: 2, z: 3 }
๋ฐฐ์ด์ ์์๊ฐ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ ๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น๊ณผ ๊ฐ์ฒด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น์ ํผ์ฉํ ์ ์์ต๋๋ค.
// 1. ํผ์ฉ ์ฌ์ฉ
const todos = [
{ id: 1, content: 'HTML', completed: true },
{ id: 2, content: 'CSS', completed: false },
{ id: 3, content: 'JS', completed: false }
];
// todos ๋ฐฐ์ด์ ๋ ๋ฒ์งธ ์์์ธ ๊ฐ์ฒด๋ก๋ถํฐ id ํ๋กํผํฐ๋ง ์ถ์ถํ๋ค.
const [, { id }] = todos;
console.log(id); // 2
// 2. ์ค์ฒฉ ๊ฐ์ฒด
const user = {
name: 'Lee',
address: {
zipCode: '03068',
city: 'Seoul'
}
};
// address ํ๋กํผํฐ ํค๋ก ๊ฐ์ฒด๋ฅผ ์ถ์ถํ๊ณ ์ด ๊ฐ์ฒด์ city ํ๋กํผํฐ ํค๋ก ๊ฐ์ ์ถ์ถํ๋ค.
const { address: { city } } = user;
console.log(city); // 'Seoul'
[์ถ์ฒ] ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive
'JavaScript > ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ (0) | 2022.08.09 |
---|---|
[JavaScript] Set๊ณผ Map (0) | 2022.08.07 |
[JavaScript] ์คํ๋ ๋ ๋ฌธ๋ฒ (0) | 2022.08.05 |
[JavaScript] ์ดํฐ๋ฌ๋ธ (0) | 2022.08.05 |
[JavaScript] 7๋ฒ์งธ ๋ฐ์ดํฐ ํ์ Symbol (0) | 2022.08.05 |
- Total
- Today
- Yesterday
- ์๋ฐ
- ๋ฐฑ์ค
- ์ ์ญ ๋ณ์
- ์นด์นด์ค ์ธํด
- ํ๋กํ ์ฝ
- ํ๋ก๊ทธ๋๋จธ์ค
- JavaScript
- ์ด๋ถํ์
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- ์๊ณ ๋ฆฌ์ฆ
- git
- ๋ฐฑ์ค node.js
- ๋์์ธ ํจํด
- ํฌํฌ์ธํฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ์ฝ๋ฉํ ์คํธ
- map
- ์ด์์ฒด์
- ๋ฐฑ์ค javascript
- ํ๋กํผํฐ
- ๋ ์์ปฌ ํ๊ฒฝ
- ๋คํธ์ํฌ
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- TDD
- Baekjoon
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- http
- fp
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |