본문 바로가기
Programming Languages/Javascript

Rest 파라미터

by Calvin H. 2022. 5. 30.

오늘은 rest 와 spread의 차이점을 살펴보려 한다.

 

시작하기 전에 간략하게 말하자면 rest 는 단축식이고 spread 는 퍼뜨리는 형식이다.

 

Rest 같은 경우는 함수에서 흔히 발견할 수 있는데

 

예를 들어 : 

function sum(...args) {
  return args.reduce((previous, current) => {
    return previous + current;
  });
}

console.log(sum(4, 5, 6));
// expected output: 15

console.log(sum(2, 2, 1));
// expected output: 5

 

에서 볼 수 있듯이 숫자들의 합을 구하는 함수에 들어가는 인자 개수가 지정되어있지 않았을 때에는 " . "을 세 개를 연속으로 이어주어 인자들을 하나로 묶을 수 있다. 이 때 돌아오는 반환 타입은 '표준' 자바스크립트 배열이다. 또한 사용할 때 주의해야 할 점은 제일 마지막 파라미터 값으로 지정해야 된다는 것이다. 그래야만 사용 가능하다.

 

헷갈릴 수도 있는 게 arguments와의 차이점인데, rest 같은 경우에는 지정되어 있지 않은 값들만 묶어주지만 arguments는 모든 인자들을 포함하기 때문에 다르다는 것을 분명히 해야한다. 

 

또한 재밌는 것은 만약에 

function sum(...[a, b, c]) {
  //code goes here
}

 

를 적었다면 rest는 분리가 된다는 것이다.

MDN에서 들어주는 예시를 보면 조금 더 이해가 잘 될 것이다.

 

function f(...[a, b, c]) {
  return a + b + c;
}

f(1)          // NaN (b 와 c 는 undefined)
f(1, 2, 3)    // 6
f(1, 2, 3, 4) // 6 (4번 째 파라미터는 해체되지 않음)

 

이처럼 만약에 지정된 값들이 있으면 그 값들이 없는 상황에서는 인자들이 undefined로 변환되고

만약에 지정된 인자들의 개수보다 더 많으면 해체가 아예되지 않는다

 

이런 부분들만 유의하면 rest는 얼마든지 유용하게 사용할 수 있다는 것!

'Programming Languages > Javascript' 카테고리의 다른 글

비동기적 호출 - [setTimeout, setInterval]  (0) 2022.05.30
super()를 이용한 class 상속 방법 (ES6)  (0) 2022.05.30
Javascript의 Class 활용법  (0) 2022.05.30
Const, Var, Let  (0) 2022.05.30
Switch Cases  (0) 2022.05.30