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


μ΄λ²ˆμ— λ‹€λ£° λ‚΄μš©μ€  default + rest + spread μž…λ‹ˆλ‹€. λ‚΄μš©μ€ 크게 어렡지 μ•ŠμŠ΅λ‹ˆλ‹€. 적어도 defaultλŠ” ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ‹€λ³΄λ©΄ 많이 λ“£λ˜ 말 쀑에 ν•˜λ‚˜μ£ . Rest와 Spread λ˜ν•œ 기쑴에 ES5μ—μ„œ μ‚¬μš©ν–ˆλ˜ 방법을 μ’€ 더 κ°„κ²°ν•˜κ³  κ°„νŽΈν•˜κ²Œ μž‘μ„±ν•˜κΈ° μœ„ν•œ μƒˆλ‘œμš΄ μ—°μ‚°μžλ₯Ό μ œκ³΅ν•΄μ£ΌλŠ” κ°œλ…μž…λ‹ˆλ‹€.



❖ default

: κΈ°λ³Έ κ°’μ΄λΌλŠ” 뜻이죠. μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” κΈ°λ³Έ 값이 μ—†λ‹€λ©΄ undefined λΌλŠ” 값을 κ°–κ³ μžˆμŠ΅λ‹ˆλ‹€. 말 κ·ΈλŒ€λ‘œ 값이 μ—†λ‹€λŠ” 뜻이죠. ν•˜μ§€λ§Œ λ•Œμ— λ”°λΌμ„œ κ°’μ˜ μž…λ ₯이 없어도 κΈ°λ³Έ 값을 μ •ν•΄μ€˜μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆμ„ κ²λ‹ˆλ‹€. 


1
2
3
4
5
6
7
//ES5
function inc(number, increment) {
  increment = increment || 1;
  return number + increment;
}
console.log(inc(22)); // 4
console.log(inc(2));    // 3
cs
=> inc λΌλŠ” ν•¨μˆ˜λŠ” 2개의 인자λ₯Ό λ°›μœΌλ©° λ§Œμ•½ 두 번째 인자(increment) 값이 μ—†μœΌλ©΄ increment에 무쑰건 1 값을 λŒ€μž…ν•˜μ—¬ 두 인자의 합을 λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ default 값은 OR μ—°μ‚°μž(||) λ₯Ό 톡해 1 값을 μ„€μ •ν•΄μ£Όκ³  있죠. λ¬Όλ‘  if문을 톡해 if(increment === undefined) 와 같이 μž‘μ„±ν•΄λ„ λ©λ‹ˆλ‹€. μ—¬κΈ°μ„  μ’€ 더 κ°„κ²°ν•˜κ²Œ μž‘μ„±ν•  수 μžˆλŠ” 방법인 OR μ—°μ‚°μžλ₯Ό 톡해 μž‘μ„±μ„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.


1
2
3
4
5
6
//ES6
function inc(number, increment=1) {
  return number + increment;
}
console.log(inc(22)); // 4
console.log(inc(2));    // 3
cs

=> ν•¨μˆ˜κ°€ μ’€ 더 κ°„κ²°ν•΄μ‘Œμ£ ? ν•¨μˆ˜ μž‘μ„± λΆ€λΆ„μ—μ„œ increment=1 이라고 default 값을 μž‘μ„±ν•˜μ—¬ 값이 μ•ˆλ“€μ–΄μ™”μ„ μ‹œμ— λ”°λ‘œ 값을 μ„€μ •ν•΄μ€˜μ•Ό ν•˜λŠ” ν•„μš”κ°€ μ—†μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€. 



❖ rest

: μ˜μ–΄ κ·ΈλŒ€λ‘œ ν•΄μ„ν•˜μžλ©΄ λ‚˜λ¨Έμ§€ 라고 해석될 수 μžˆκ² λ„€μš”. μ—¬κΈ°μ„  "..." μ΄λΌλŠ” μƒˆλ‘œμš΄ μ—°μ‚°μžκ°€ λ“±μž₯ν•©λ‹ˆλ‹€. 일반적으둜 뒀에 λ‚΄μš©μ΄ 계속 λ˜λŠ”λ° μƒλž΅λ˜μ–΄μ§ˆ λ•Œ ... μ΄λΌλŠ” 말을 μ“°κ³€ν•˜μ£ . λ§Œμ•½ ν•¨μˆ˜μ— λ“€μ–΄κ°€λŠ” λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜κ°€ 정해지지 μ•Šμ•˜λ‹€λ©΄ λ§€κ°œλ³€μˆ˜μ˜ 개수만큼 μ „μ²˜λ¦¬ ν•΄μ•Όν•˜λŠ” ꡬ문을 써야할 κ²ƒμž…λ‹ˆλ‹€.


1
2
3
4
5
6
7
8
9
//ES5
function sort(){
    var numbers = Array.prototype.slice.call(arguments)
        .sort(function(a,b){return a-b;});
    return numbers;
}
 
console.log(sort(10,2,6,4));           //[ 2, 4, 6, 10 ]
console.log(sort(9,8,7,100,20,15,17)); //[ 7, 8, 9, 15, 17, 20, 100 ]
cs

=> μ˜€λ¦„μ°¨μˆœ 정렬을 ν•˜λŠ” ν•¨μˆ˜μΈλ°, λ§€κ°œλ³€μˆ˜κ°€ λ°°μ—΄λ‘œ λ“€μ–΄κ°€λŠ” 것이 μ•„λ‹ˆλΌ μ΄λ ‡κ²Œ κ°œμˆ˜κ°€ 정해지지 μ•ŠλŠ” μ½€λ§ˆν˜•νƒœλ‘œ λ“€μ–΄κ°„λ‹€κ³  κ°€μ •ν•˜κ² μŠ΅λ‹ˆλ‹€. 그럼 sortν•¨μˆ˜λ₯Ό μ“°κΈ° μœ„ν•΄μ„œλŠ” ν•¨μˆ˜ 호좜 μ‹œμ— argumentsλ₯Ό λ°°μ—΄ν™”μ‹œμΌœμ„œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. λͺ‡κ°œμ˜ λ§€κ°œλ³€μˆ˜κ°€ λ“€μ–΄μ˜¬μ§€λ₯Ό λͺ¨λ₯΄λ‹ˆ sortν•¨μˆ˜μ— λ§€κ°œλ³€μˆ˜λ₯Ό μ •μ˜ν•  μˆ˜κ°€ μ—†μ£ . 



1
2
3
4
5
6
7
//ES6
function sort(...numbers){
    return numbers.sort(function(a,b){return a-b;});
}
 
console.log(sort(10,2,6,4));           //[ 2, 4, 6, 10 ]
console.log(sort(9,8,7,100,20,15,17)); //[ 7, 8, 9, 15, 17, 20, 100 ]
cs

=> sort ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ argumentsλ₯Ό ...numbers 라고 μ •μ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€. κ°œμˆ˜κ°€ μ •μ˜λ˜μ§€ μ•Šμ€ λ§€κ°œλ³€μˆ˜μ΄κΈ° λ•Œλ¬Έμ— 였λ₯˜κ°€ λ‚˜μ§€ μ•Šκ³  Array둜 λ³€ν™˜ν•  ν•„μš”λ„ μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ •λ ¬ μž‘μ—…μ„ ν•˜κΈ° μœ„ν•΄μ„œλŠ” κ·Έλƒ₯ sortν•¨μˆ˜λ§Œ μ‚¬μš©ν•˜λ©΄ κ°„κ²°ν•œ μ½”λ“œμž‘μ„±μ΄ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€. 참고둜 ... μ—°μ‚°μžλŠ” λ”± ν•œ 번만 μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€. μ—¬λŸ¬κ°œμ˜ ... μ—°μ‚°μžλ₯Ό 가진 ν•¨μˆ˜λŠ” μ •μ˜ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. λ˜ν•œ λ§€κ°œλ³€μˆ˜κ°€ μ—¬λŸ¬κ°œμΌ λ•Œ 맨 λ§ˆμ§€λ§‰μ— ... μ—°μ‚°μžλŠ” 맨 λ§ˆμ§€λ§‰μ— μœ„μΉ˜ν•΄μ•Όν•©λ‹ˆλ‹€.


※참고사항

: argumentsλŠ” μœ μ‚¬λ°°μ—΄κ°μ²΄μ΄κ³ , rest parameterλŠ” λ°°μ—΄μž…λ‹ˆλ‹€. μœ μ‚¬λ°°μ—΄κ°μ²΄λŠ” λ°°μ—΄μ²˜λŸΌ μ‚¬μš©μ€ 되긴 ν•˜μ§€λ§Œ Array 였브젝트의 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. ES6의 ν™”μ‚΄ν‘œν•¨μˆ˜μ—μ„œλŠ” arguments 객체λ₯Ό λ°”μΈλ”©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ rest parameter μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€.



❖ spread

: μ „κ°œ μ—°μ‚°μžλŠ” λ°°μ—΄μ΄λ‚˜ 객체λ₯Ό ν™•μž₯ν•˜μ§€λ§Œ, λ°˜λ©΄μ— λ‚˜λ¨Έμ§€ ꡬ문은 2개 μ΄μƒμ˜ μš”μ†Œμ„ ν•˜λ‚˜μ˜ μš”μ†Œλ‘œ λͺ¨μλ‹ˆλ‹€. ν™•μž₯λœλ‹€λŠ” 말에 μ΄ˆμ μ„ λ§žμΆ”μ–΄μ„œ λͺ‡κ°œμ˜ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.


1. λ°°μ—΄ λ³΅μ‚¬ν•˜κΈ°

1
2
3
4
5
// ES5
var arr1 = [1,2,3];
var arr2 = arr1.slice();
 
console.log(arr2);    // [1,2,3]
cs

=> λ°°μ—΄ 객체의 slice λ‚΄μž₯ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ arr2에 arr1의 λ‚΄μš©μ„ 볡사할 수 μžˆμŠ΅λ‹ˆλ‹€.


1
2
3
4
5
// ES6
var arr1 = [1,2,3];
var arr2 = [...arr1];
 
console.log(arr2);    // [1,2,3]
cs

=> λ‚΄μž₯ν•¨μˆ˜μ˜ μ‚¬μš© 없이 μ „κ°œ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 배열을 κ·ΈλŒ€λ‘œ 볡사할 수 μžˆμŠ΅λ‹ˆλ‹€.


2. λ°°μ—΄ push

1
2
3
4
5
6
//ES5
var arr1 = [012];
var arr2 = [345];
// arr1에 arr2의 λͺ¨λ“  ν•­λͺ©μ„ λ§λΆ™μž„
Array.prototype.push.apply(arr1, arr2);
console.log(arr1);    //[0,1,2,3,4,5]
cs

=> apply() λ©”μ„œλ“œλŠ” μ£Όμ–΄μ§„ thisκ°’κ³Ό arguments둜 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. argumentsμ—λŠ” λ°°μ—΄(λ˜λŠ” μœ μ‚¬λ°°μ—΄κ°μ²΄ array-like object)κ°€ 올 수 μžˆμŠ΅λ‹ˆλ‹€. 


1
2
3
4
5
6
//ES6
var arr1 = [012];
var arr2 = [345];
// arr1에 arr2의 λͺ¨λ“  ν•­λͺ©μ„ λ§λΆ™μž„
arr1.push(...arr2);
console.log(arr1);    //[0,1,2,3,4,5]
cs

=> push λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ spread μ—°μ‚°μžλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ μ‚¬μš©ν•˜μ—¬ ν™•μž₯된 배열을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. ES6 λ¬Έλ²•μ—μ„œλŠ” rest parameterλ₯Ό ꢌμž₯ν•˜λ―€λ‘œ ES6둜 μž‘μ„±ν•˜λŠ” μ½”λ“œμ—μ„œλŠ” μœ„μ™€ 같은 방법이 μ˜³λ‹€κ³  ν•  수 μžˆκ² λ„€μš”.



(λ‚΄μš© 좜처

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Spread_operator

https://medium.com/ecmascript-2015/default-rest-spread-f3ab0d2e0a5e )

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

8. iterators + for..of  (0) 2019.01.11
7. let + const  (0) 2019.01.06
5. destructuring  (0) 2018.12.31
4. template strings  (0) 2018.12.24
javascript둜 λλ§μž‡κΈ° λ§Œλ“€κΈ°  (0) 2018.12.24
λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
Β«   2024/12   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
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
κΈ€ 보관함