ES6 rest parameters 와 spread parameter

ES6에서 …​은 rest parameters, spread operator로 두군데서 쓰입니다.

이게 하나의 함수에서 같이 사용되면 좀 헷갈릴수 있는데요

const o = { message:'abc', age:1, gener:'Male'}
console.log(o)
{message: "abc", age: 1, gener: "Male"}

// 여기에서 ...은 rest parameter operator
const {message, ...r} = o;

console.log(message);
"abc"

console.log(r)
{age: 1, gener: "Male"}

// 여기에서...은 spread object operator

const o2 = {message, ...r}
console.log(o2)
{message: "abc", age: 1, gener: "Male"}

좀 헷갈리긴 해도 유용하긴합니다.

위의 사용예를 RORO(Receive Object Return Object)패턴에서 응용해보면 다음처럼 활용할수 있습니다.

requiredParam 함수는 RORO Pattern 에서 가져왔다.
function requiredParam (param) {
  const requiredParamError = new Error(
  'Required parameter, "${param}" is missing.'
  )
 // preserve original stack trace
  if (typeof Error.captureStackTrace === 'function') {
    Error.captureStackTrace(
      requiredParamError,
      requiredParam
    )
  }
 throw requiredParamError
}

class Exception {
  constructor({
    message=requireParam('message'),
    ...payload
  }={}){
    Object.assign(this, {message, ...payload});
  }
}

예외에 다양한 인자를 넘겨주지만 message는 필수값이고 나머지는 옵션일때 사용할수 있습니다. 위의 예가 예외 안에서 또 예외를 던지는거라 좀 이상해 보이긴합니다만 그부분은 아 그냥 예제니까 그런가 보다 하고 넘어가주세요 ^^

Tags: