์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ๋ ๋ ์ฐ์ฐ์(Spread Operator)๋ ECMAScript6(2015)์์ ์๋ก ์ถ๊ฐ๋ ๋ฌธ๋ฒ์ผ๋ก, ์ธ ๊ฐ์ ์ (...)์ผ๋ก ํํ๋๋ฉฐ, ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์๋ค์ ๊ฐ๋ณ ์์๋ก ๋ถํดํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค๋ค. ์ฃผ๋ก ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ๋ณต์ฌ, ๋ณํฉ, ํจ์ ํธ์ถ ์ ์ธ์ ์ ๋ฌ ๋ฑ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
// ํผ์น ๋์์ด ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ
{...obj}
// ํผ์น ๋์์ด ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ
[...arr]
// ํน์
{...arr}
arr1์ ๋ชจ๋ ์์๋ฅผarr2์ ๋ณต์ฌํ๋ค.arr2๋arr1๊ณผ ๋ณ๊ฐ์ ์๋ก์ด ๋ฐฐ์ด์ด๋ค.
const arr1 = [1, 2, 3];
const arr2 = [...arr1];
console.log(arr2); // [1, 2, 3]
๋ฐฐ์ด์ ๋ณํฉํ๋๋ฐ, ES5 ๋ฐฐ์ด ๋ณํฉ๊ณผ ES6์ ๋ฐฐ์ด ๋ณํฉ์๋ ์ฐจ์ด๊ฐ ์๋ค.
// ES5 ๋ฐฐ์ด์ ๋ณํฉ: concat์ ์ฌ์ฉ
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = [7, 8, 9];
const arrWrap = arr1.concat(arr2, arr3);
console.log(arrWrap); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
// ES6 ๋ฐฐ์ด์ ๋ณํฉ: Spread์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๊ณ , ๋ฐฐ์ด๋ก ๋ค์ ๋ฌถ์
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const merged = [...arr1, ...arr2];
console.log(merged); // [1, 2, 3, 4, 5, 6]
๋ฐฐ์ด์ ์์ด๋ ๋ค์ ์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
const arr1 = [1, 2, 3];
const newArr = [0, ...arr1, 4];
console.log(newArr); // [0, 1, 2, 3, 4]
๋น๊ตฌ์กฐํ ํ ๋น๊ณผ ๋๋จธ์ง ์์(๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ๋๋จธ์ง ์์๋ฅผ ํ ๋น ๋ฐ์ ์ ์๋ค.
const [first, second, ...rest] = [1, 2, 3, 4, 5];
console.log(first); // 1
console.log(second); // 2
console.log(rest); // [3, 4, 5]
obj1์ ๋ชจ๋ ํ๋กํผํฐ๋ฅผ obj2์ ๋ณต์ฌํ๋ค. obj2๋ obj1๊ณผ ๋ณ๊ฐ์ ์๋ก์ด ๊ฐ์ฒด์ด๋ค.
const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1 };
console.log(obj2); // { a: 1, b: 2 }
๋ ๊ฐ์ฒด๋ฅผ ํ๋์ ๊ฐ์ฒด๋ก ๋ณํฉํ๋ค. ์ด ๊ฒฝ์ฐ, obj1๊ณผ obj2์ ๋์ผํ ํ๋กํผํฐ b๊ฐ ์์ผ๋ฏ๋ก, ๋ง์ง๋ง์ ์คํ๋ ๋๋ ๊ฐ์ฒด(obj2)์ ๊ฐ์ผ๋ก ๋ฎ์ด์์์ง๋ค.
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const merged = { ...obj1, ...obj2 };
console.log(merged); // { a: 1, b: 3, c: 4 }
๋ฐฐ์ด์ ์์๋ฅผ ๊ฐ๋ณ ์ธ์๋ก ์ ๋ฌํ ์ ์๋ค.
function sum(x, y, z) {
return x + y + z;
}
const numbers = [1, 2, 3];
console.log(sum(...numbers)); // 6
์คํ๋ ๋ ์ฐ์ฐ์์ ๋น์ทํ ๋ฌธ๋ฒ์ผ๋ก Rest ํ๋ผ๋ฏธํฐ๊ฐ ์๋ค. Rest ํ๋ผ๋ฏธํฐ๋ ํจ์ ์ ์ ์์ ์ฌ์ฉ๋๋ฉฐ, ์ธ์๋ค์ ๋ฐฐ์ด๋ก ๋ชจ์ผ๋ ์ญํ ์ ํ๋ค.
์ฌ๊ธฐ์ findMin ํจ์๋ ์ฌ๋ฌ ์ซ์ ์ธ์ ์ค์์ ์ต์๊ฐ์ ๋ฐํํฉ๋๋ค. Rest ํ๋ผ๋ฏธํฐ ...numbers๋ฅผ ์ฌ์ฉํด ๋ชจ๋ ์ธ์๋ฅผ ๋ฐฐ์ด๋ก ์์งํ ํ, Math.min() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ต์๊ฐ์ ๊ณ์ฐํ๋ค.
function findMin(...numbers) {
return Math.min(...numbers);
}
console.log(findMin(5, 2, 10, 3)); // 2
console.log(findMin(12, 6, 8)); // 6
์ด ํจ์๋ ์์์ ์์ ๋ฌธ์์ด ์ธ์๋ฅผ ๋ฐ์ ํ๋์ ๋ฌธ์์ด๋ก ๊ฒฐํฉํ๋ค. ๊ฐ ๋ฌธ์์ด ์ฌ์ด์ ๊ณต๋ฐฑ์ ์ถ๊ฐํ์ฌ ์ฐ๊ฒฐํ๋ค.
function concatenateStrings(...strings) {
return strings.join(' ');
}
console.log(concatenateStrings("Hello", "world!")); // "Hello world!"
console.log(concatenateStrings("How", "are", "you", "today?")); // "How are you today?"
reduce๋ฅผ ํ์ฉํ์ฌ ๋ฐฐ์ด์ ์๋ ์์๋ค์ ํฉ์ ๊ตฌํด๋ณด์. reduceํจ์์ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ๋ค.
array.reduce(function(accumulator, currentValue, currentIndex, array) {
// ํจ์ ๋ณธ๋ฌธ
}, initialValue)
์ผ๋ฐ์ ์ผ๋ก, reduceํจ์๋ accumulator์ currentValue๋ง ํ์๋ก ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์๋ฅผ ๋ค์ด, ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ๋ํ๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค. (currentIndex์ array๋ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ์๋ต๋์๋ค.)
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce(function(acc, val) {
return acc + val;
}, 0); // 10
// ํ์ดํ ํจ์๋ก๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋๋ค.
const sum = numbers.reduce((acc, val) => acc + val, 0); // 10
๋ชจ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ํ์ฉํ ๊ฒฝ์ฐ๋ ์๋๋ฅผ ์ฐธ๊ณ ...

Rest ํ๋ผ๋ฏธํฐ๋ ํจ์์ ์ ์ฐ์ฑ์ ๋์ฌ ์ฃผ๊ณ , ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ช ์์ ์ผ๋ก ์ฒ๋ฆฌํ ํ์ ์์ด ๋ค์ํ ์๋๋ฆฌ์ค์ ๋ง์ถฐ ํจ์๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๊ฒ ๋์์ค๋ค.