ν‹°μŠ€ν† λ¦¬ λ·°

javascript/λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ

5. destructuring

λŒ•λŒ•μ΄λ°œπŸΎ 2018. 12. 31. 15:33



μ΄λ²ˆμ— 닀뀄볼 μ£Όμ œλŠ” destructuring μž…λ‹ˆλ‹€. 일단 destructuring은 λΆ„ν•΄, 파괴 이런 의미둜 μ“°μ΄λŠ” λ‹¨μ–΄μΈλ°μš”, MDNμ—μ„œ 검색해보면 ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή μ΄λΌλŠ” 파트둜 μ„€λͺ…을 ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΈ°λ³Έ μš”μ•½μ„€λͺ…은 μ΄λ ‡μŠ΅λ‹ˆλ‹€.


βœ”οΈκ΅¬μ‘° λΆ„ν•΄ ν• λ‹Ή

ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή(destructuring assignment) ꡬ문은 λ°°μ—΄μ΄λ‚˜ 객체의 속성을 ν•΄μ²΄ν•˜μ—¬ κ·Έ 값을 κ°œλ³„ λ³€μˆ˜μ— 담을 수 있게 ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ ν‘œν˜„μ‹(expression)μž…λ‹ˆλ‹€.


λ°°μ—΄μ΄λ‚˜ 객체같은 μ—¬λŸ¬κ°€μ§€ 데이터λ₯Ό 가지고 μžˆλŠ” μžλ£Œν˜•μ— λŒ€ν•΄μ„œ μ‚¬μš©μžκ°€ μ›ν•˜λŠ” 속성 값을 μ‚¬μš©ν•˜κ³ μž ν•  λ•Œ μœ μš©ν•˜κ²Œ μ“°μž…λ‹ˆλ‹€. 일반적인 λ¬Έμžμ—΄μ΄λ‚˜ μˆ«μžμ™€ 같은 μžλ£Œν˜•μ—μ„œλŠ” 쓰이지 μ•Šκ³ , κ°μ²΄λ‚˜ 배열에 λŒ€ν•΄μ„œ ν™œμš©ν•  수 μžˆλŠ” λ°©λ²•μž…λ‹ˆλ‹€. 



❖ λ°°μ—΄ λ””μŠ€νŠΈλŸ­μ²˜λ§

: 배열은 μ—°μ†λœ 데이터λ₯Ό 인덱슀λ₯Ό 톡해 μ ‘κ·Όν•˜μ—¬ λ°°μ—΄ 각각의 속성 값을 μ œμ–΄ν•˜κ²Œ λ˜λŠ”λ°μš”, λ°°μ—΄μ˜ 속성을 μ œμ–΄ν•˜λŠ” μ½”λ“œλ₯Ό λͺ‡κ°œ μ˜ˆμ‹œλ‘œ λ“€μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

1. 두 λ³€μˆ˜μ˜ κ°’ λ°”κΎΈκΈ°(swap)
1
2
3
4
5
6
7
8
9
10
//ES5
var values = [0,1];
//assignment
var x = values[0],
    y = values[1];
//swap
var temp;
temp = x;
= y;
= temp;
cs


=> values λΌλŠ” 배열을 μƒμ„±ν•˜κ³  각각의 x,y λ³€μˆ˜μ— 값을 ν• λ‹Ήν•œ ν›„ tempλΌλŠ” λ³€μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ 값을 λ°”κΎΈλŠ” μž‘μ—…μ˜ 단계λ₯Ό 거치게 λ©λ‹ˆλ‹€. 별거 μ•„λ‹Œ μž‘μ—…μΈλ° μ½”λ“œκ°€ 생각보닀 μ’€ κΈΈμ£ . ES6μ—μ„œμ˜ destructuring 을 ν†΅ν•΄μ„œλŠ” μ–΄λ–»κ²Œ λ³€ν™”λ˜λŠ”μ§€ λ³΄κ² μŠ΅λ‹ˆλ‹€.

1
2
3
4
5
6
//ES6
var values = [0,1];
//assignment
var [x,y] = values;
//swap
[x,y] = [y,x];
cs


=> μ½”λ“œκ°€ ꡉμž₯히 λ‹¨μˆœν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. ν• λ‹Ήν•˜λ €λŠ” λ³€μˆ˜λ₯Ό λ°°μ—΄λ‘œ μ„ μ–Έν•˜μ—¬ values의 값을 ν•œλ²ˆμ— ν• λ‹Ήμ‹œμΌœλ²„λ¦½λ‹ˆλ‹€. λ¬Όλ‘  λ™μΌν•œ 인덱슀끼리 μŒμ„ λ§žμΆ°μ„œ 할당이 λ©λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄ [x,y,z] = values 라고 ν–ˆμœΌλ©΄ λ§ˆμ§€λ§‰ z λŠ” undefined 값이 λ‚˜μ˜€κ²Œ λ©λ‹ˆλ‹€. 그리고 값을 λ°”κΎΈλŠ” swap μž‘μ—…μ„ ν•  λ•Œμ—λ„ 값을 λ°”κΎΈλ €λŠ” λ³€μˆ˜ λ‘κ°œλ₯Ό μˆœμ„œλ₯Ό λ°”κΏ”μ„œ λ°°μ—΄λ‘œ 값을 ν• λ‹Ήν•˜λŠ” μž‘μ—…μ„ ν•˜λ©΄ κ°„λ‹¨ν•˜κ²Œ 값이 λ°”λ€Œκ²Œ 되죠.


2. μƒλž΅ν•˜κΈ°

1
2
3
4
var values = [3,6,9];
var [x,,z] = values;
console.log(x);    //result = 3
console.log(z);  //result = 9

cs


=> 배열에 μžˆλŠ” 값듀을 λ³΅μ‚¬ν•˜λ˜, κ°€μš΄λ°μ—λŠ” λ³€μˆ˜λ₯Ό μž…λ ₯ν•˜μ§€ μ•Šκ³  있죠. 사싀 μ €λŠ” μ΄λ ‡κ²Œ 써본적은 μ—†μ§€λ§Œ κ°€λŠ₯ν•˜λ‹€κ³ λŠ” μ•Œκ³ μžˆμœΌλ©΄ 될 것 κ°™λ„€μš”.


3. 쀑첩배열

1
2
3
var values = [1,[2,3],4];
var [a,[b,c],d] = values;
console.log(a,b,c,d);    //result = 1,2,3,4
cs


=> μ€‘μ²©λœ λ°°μ—΄ μ•ˆμ—μ„œλ„ λ™μΌν•˜κ²Œ μ μš©λ©λ‹ˆλ‹€. λ¬Όλ‘  μƒλž΅λ„ κ°€λŠ₯ν•©λ‹ˆλ‹€.




❖ 객체 λ””μŠ€νŠΈλŸ­μ²˜λ§


: λ°°μ—΄ 뿐만 μ•„λ‹ˆλΌ 객체 λ˜ν•œ ꡉμž₯히 λ§Žμ΄μ“°κ²Œ 되죠. κ°μ²΄μ—μ„œλŠ” μ–΄λ–»κ²Œ λ””μŠ€νŠΈλŸ­μ²˜λ§ν•˜λŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


1. κ°’ ν• λ‹Ή

1
2
3
4
5
6
7
8
var values = {
    x:1,
    y:2
};
 
var {x: a, y: b} = values;
 
console.log(a,b) //result = 1 2
cs


=> λ°°μ—΄κ³Ό 방식은 크게 λ‹€λ₯΄μ§€ μ•Šμ€λ° κ°μ²΄μ—μ„œλŠ” key와 key value 둜 κ΅¬λΆ„λ˜μ–΄μ§‘λ‹ˆλ‹€. κ·Έλž˜μ„œ μœ„μ™€κ°™μ΄ ν• λ‹Ήν•˜κ³  싢은 λ³€μˆ˜λ₯Ό key value μžλ¦¬μ— λ„£κ²Œ 되면 값을 할당받을 수 μžˆμŠ΅λ‹ˆλ‹€.



2. μ€‘μ²©λœ 객체

1
2
3
4
5
6
7
8
9
10
var values = {
    x:1,
    y:2,
    z: {
        z1:3,
        z2:4
    }
};
 
var {x: a, y: b, z:{z1: c, z2: d}} = values;    //result = 1 2 3 4
cs


=> μ€‘μ²©λœ 객체 λ˜ν•œ λ™μΌν•œ λ°©μ‹μž…λ‹ˆλ‹€. key value μžλ¦¬μ— λ³€μˆ˜λ₯Ό λ„£μ–΄ κ·Έ 값을 λ‹΄κ²Œ λ©λ‹ˆλ‹€.



3. ν•¨μˆ˜ λ””μŠ€νŠΈλŸ­μ²˜λ§

1
2
3
4
5
6
7
8
9
10
11
12
13
function func(){
    return {
        x: 1,
        y: 2,
        z: [3,4,5]
    };
}
 
var {x: a, y: b, z: c} = func();
 
console.log(a);    //1
console.log(b);    //2
console.log(c);    //[3,4,5]
cs


=> 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€μ—ˆλŠ”λ° ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ„œ 값을 ν• λ‹Ήλ°›λŠ” 것 λ˜ν•œ κ°€λŠ₯ν•©λ‹ˆλ‹€. 첫 번째 λ¬Έν•­μ—μ„œ 값을 ν• λ‹Ήλ°›λŠ” 과정을 단지 ν•¨μˆ˜ν˜ΈμΆœλ‘œ λ°”κΎΌ 것 λΏμž…λ‹ˆλ‹€. λ˜ν•œ λ³΄λ‹€μ‹œν”Ό ν•¨μˆ˜μ™€ 배열을 μ„žμ–΄μ„œ μ‚¬μš©ν•˜λŠ” 것 λ˜ν•œ κ°€λŠ₯ν•©λ‹ˆλ‹€.



(λ‚΄μš© 좜처 : https://medium.com/ecmascript-2015/es6-destructuring-13ca399f993a)

'javascript > λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

7. let + const  (0) 2019.01.06
6. default + rest + spread  (0) 2019.01.03
4. template strings  (0) 2018.12.24
javascript둜 λλ§μž‡κΈ° λ§Œλ“€κΈ°  (0) 2018.12.24
3 enhanced object literals  (0) 2018.12.13
λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
Β«   2025/01   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
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
κΈ€ 보관함