main-logo

Spread 문법(전개 구문) 알아보기

펼치다(Spread)의 개념 정리

profile
nagaeso
2022년 09월 24일 · 0 분 소요

들어가며

이 구문을 사용할 때 보면 막상 손에 익지 않는 느낌이라 포스팅에 주제로 삼게 되었습니다. ES6에 새로 추가된 구문이며 객체나 배열 앞에 …를 붙여 사용합니다. 객체와 배열을 펼쳐(spread) 객체 혹은 배열, (함수일 때는) 인수로 활용합니다. 간단한 예로 펼치다(spread) 의미를 확인할 수 있습니다.

const array1 = [1, 3, 5];
const array2 = [2, ...array1, 6];

console.log(array2);
// 1번 [2, [1, 3, 5], 6] ?
// 2번 [2, 1, 3, 5, 6] ?

1번과 2번 중 어떤 것이 맞을까요? 이 문법을 알지 못하였다면 1번과 같이 이중 배열을 충분히 예상할 수 있습니다. (다들 아시겠지만) 정답은 2번입니다. 따라서 펼치다(spread)는 것은 객체 혹은 배열의 속성을 가져올 수 있다는 것을 의미합니다.

배열의 Spread

배열의 복사(myArray.splice()), 추가(myArray.push()), 연결(myArray.concat())에 대해 메소드를 대신하여 사용할 수 있습니다.

복사

const colors1 = ['red', 'blue', 'black', 'yellow'];
const colors2 = [...colors1];

console.log(colors1);
// ['red', 'blue', 'black', 'yellow']
console.log(colors2);
// ['red', 'blue', 'black', 'yellow']
console.log(colors1 === colors2);
// false, colors1와 colors2은 서로 다른 배열

추가

let number1 = [1, 2, 3];
let number2 = [4, 5, 6];

number1 = [...number1, ...number2, 7, 8];
// [1, 2, 3, 4, 5, 6, 7, 8]
number2 = [...number2, ...number1];
//  [4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 8]



객체의 Spread

객체가 소유한 속성에 새로운 속성을 추가합니다.

const zoo1 = {
  tiger: '6마리',
  giraffe: '2마리',
  rabbit: '5마리',
};
const zoo2 = { ...zoo1 };

console.log(zoo1);
// {tiger: '6마리', giraffe: '2마리', rabbit: '5마리'}
console.log(zoo2);
// {tiger: '6마리', giraffe: '2마리', rabbit: '5마리'}
console.log(zoo1 === zoo2);
// false, zoo1와 zoo2는 서로 다른 객체

객체의 병합

const zoo1 = {
  lion: '3마리',
  monkey: '6마리',
};
const zoo2 = {
  lion: '2마리',
  elephant: '4마리',
};
const zoo3 = { ...zoo1, ...zoo2 };

console.log(zoo3);
// {lion: '2마리', monkey: '6마리', elephant: '4마리'}



함수의 Spread

함수의 인자로 배열을 활용할 때 쓰는 Funtion.apply() 보다 간편하게 사용할 수 있습니다.

function FunctionDivision(x, y) {
  return x / y;
}
const arrayNumber = [10, 2];

// apply()
console.log(FunctionDivision.apply(null, arrayNumber));
// 5

// spread syntax
console.log(FunctionDivision(...arrayNumber));
// 5



마치며

자주 사용하기 위해 개념을 익히는 과정에서 기본적인 내용을 정리해보았습니다. 좀 더 확장성 있게 사용할 수 있도록 다양하게 활용해 보셨으면 합니다:D

고맙습니다. - 끄읕 -

참고문서