구조 분해 할당과 나머지 매개 변수

이동창·2022년 3월 23일
0

출처 : https://stackoverflow.com/a/37152508

다음과 같이 파이썬의 partial 함수를 구현하다가

const partial = (callback, ...args) => {
    return (...other) => callback(...args, ...other)
}

이게 Spread Operator였나? 하는 생각이 들어 찾아보니
Rest parameter라는 다른 개념이었다. (관련이 없지는 않지만)

둘다 ...을 사용하다보니까, 나도 모르는 사이에 혼동하고 있었던 것이다.

이 참에 둘을 정확히 구분해보자
사실 간단해서 구분할 것도 없긴 한데...

Rest Parameter

함수 파라미터를 적을 때, ...를 사용해 나머지 매개 변수들을 담아
배열로 감싸주는 문법이다.

function foo(...args){
  console.log(...args, args)
}
foo(1,2) // 1, 2, [1, 2]

Q : arguments 쓰면 되는거 아님?
A : 물론 가능은 한데, 용도가 서로 다른 느낌.
일단 Rest Parameter는 배열이고 arguments는 유사 배열 객체이기에
기본적인 배열 메소드가 빠져있고, 또한, arguments는 모든 인자들을 끌어 담는 반면에, Speard Operator는 이미 선언한 파라미터는 담지 않아서, 각각의 개념이 필요한 상황이 있을 것 같다.

Spread Operator

Rest Parameter와 정반대로 배열이나 객체로 확장시킬 수 있는 문법이다

const obj = [1,2,3]
console.log([...obj]) // [1,2,3]
console.log({...obj}) // {0:1, 1:2, 2:3}

function addThree(a,b,c){
	return a+b+c
}
console.log(addThree(...obj)) // 6

대신 배열이나 문자열과 같은 iterable 객체에 쓸 수 있다.
즉, 객체는 안됨

0개의 댓글