์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ ... ์ ์ด์ฉํ ์ ๊ฐ ๊ตฌ๋ฌธ(spread syntax)
๋ค๋ฅธ ๋ถ์ ์ฝ๋๋ฅผ ๋ณด๋ค๊ฐ ๋ฐฐ์ด์์ ... ์ ์ฌ์ฉํ ๊ฑธ ๋ณด๊ณ ๋ญ๊ฐ ์ถ์ด์ ์ฐพ์๋ณด๋ ์ ๊ฐ ๊ตฌ๋ฌธ(Spread syntax)๋ผ ๋ถ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ด ์์๋ค.
Spread syntax (...) - JavaScript | MDN
Spread syntax (...) allows an iterable such as an array expression or string to be expanded in places where zero or more arguments (for function calls) or elements (for array literals) are expected, or an object expression to be expanded in places where ze
developer.mozilla.org
์์งํ ๋ญ๋ง์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค. ๋์ถฉ ๋ณต์์ ์๋ฆฌ๋จผํธ๋ค์ ํํํ ๋ ์ฐ์ธ๋ค๋ ๊ฒ ๊ฐ๋ค.
function sum(x, y, z) {
return x + y + z;
}
const numbers = [1, 2, 3];
console.log(sum(...numbers));
// expected output: 6
์์ ๋ฅผ ๋ด๋ ์ธ์๋ก numbers๋ฅผ ์ ๋ฌํ๋ ๊ฒ๊ณผ ๋ฌด์จ์ฐจ์ด์ธ์ง ์์๊ฐ ์๋ค.
ํด์ค์ ๋ณด๋ spread syntax์ ํน์ง์ ์ด๋ ๋ค๊ณ ํ๋ค.
์๋ ์ ๋ฌํ๋ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด ๋ฑ์ ๋ด๊ฒจ์๋ ์์ ์๊ฐ ๋ช ๊ฐ์ธ์ง๋ ์๊ด์๋ค๋ ๊ฒ์ด๋ค.
์ ์์์์ ๋ฐฐ์ด์ ๋ด๊ธด ๊ฐ์ [1,2,3,4] ๋ก ๋๋ ค๋ sum์๋ 1,2,3๋ง ์ ๋ฌ๋์ด ๊ฒฐ๊ณผ๋ ๋์ผํ๊ฒ 6์ด ๋์จ๋ค.
ํํ ๋ก์ปฌ ๋ฐ์ดํฐ ์ ์ฅ์์ ์๋ก์ด ์์ดํ ์ ์ ์ฅํ ๋ ์ฐ์ด๊ฑฐ๋ ์๋กญ๊ฒ ์ถ๊ฐํ ํ ์ ์ฅ๋ ์์ดํ ์ ํ์ํ ๋ ์ฐ์ธ๋ค๊ณ ํ๋ค.
let numberStore = [0, 1, 2];
let newNumber = 12;
numberStore = [...numberStore, newNumber];
์ ์ฝ๋๋ฅผ ์ฝ์์์ ์คํํด๋ณด๋ฉด
numberStore์ ๋ ๋ฐฐ์ด์ด ํฉ์ณ์ง ๋ฐฐ์ด์ด ํ ๋น๋๋ ๊ฒ์ ์ ์ ์๋ค.
์์ ๊ฐ์ด ์๋ก์ด ๊ฐ์ ๊ณ์ํด์ ์ถ๊ฐํ๋ ์ฝ๋๋ฅผ ์งค ์๋ ์์ ๊ฒ ๊ฐ๋ค.
//For function calls:
// pass all elements of iterableObj as arguments to function myFunction
myFunction(...iterableObj);
// For array literals or strings:
// combine two arrays by inserting all elements from iterableObj
[...iterableObj, '4', 'five', 6];
// For object literals (new in ECMAScript 2018):
// pass all key:value pairs from an object
let objClone = {...obj};
spread syntax๋ ํนํ ๋ฐฐ์ด์์ ์๋ ฅ์ ๋ฐํํ๋ค.
push๋ splice๊ฐ์ API์์ด๋ ๋ฐฐ์ด์ ์์ ํ ์ ์๋ค.
let parts = ['shoulders', 'knees'];
let lyrics = ['head', ...parts, 'and', 'toes'];
// ["head", "shoulders", "knees", "and", "toes"]
์คํ๋ ๋๋ฅผ ์ด์ฉํ๋ฉด ์๋์ฒ๋ผ ๋ฐฐ์ด์ ๋ณต์ฌํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
let arr = [1, 2, 3];
let arr2 = [...arr]; // like arr.slice()
arr2.push(4);
// arr2 becomes [1, 2, 3, 4]
// arr remains unaffected
๋ concat()์ ๋์ฒด๊ฐ๋ฅํ๋ค.
let arr1 = [0, 1, 2];
let arr2 = [3, 4, 5];
// Append all items from arr2 onto arr1
arr1 = arr1.concat(arr2);
์ด ์ฝ๋๋ฅผ ์คํ๋ ๋๋ฅผ ์ด์ฉํ๋ฉด
let arr1 = [0, 1, 2];
let arr2 = [3, 4, 5];
arr1 = [...arr1, ...arr2];
// arr1 is now [0, 1, 2, 3, 4, 5]
// Note: Not to use const otherwise, it will give TypeError (invalid assignment)
์ด๋ ๊ฒ ์ธ ์ ์๋ค.
ํ์คํ ๋ฐฐ์ด์ ์๋ก์ด ์์ดํ ์ ์ถ๊ฐํ ๋๋ ์คํ๋ ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ์ฝ๋ค. ๊ทธ๋ ๋ค๋ฉด API์ ๋น๊ตํ์ ๋ ์ฅ๋จ์ ์ ๋ฌด์์ธ์ง๋ ๊ถ๊ธํด์ง๋๋ฐ ์ผ๋จ ์ค๋์ ์ฌ๊ธฐ๊น์ง๋ง..
๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๋ณด๋ ์ต์คํ๋ก๋ฌ๋ง ์ฃฝ์ด์๋ ๋ชจ์ต.. ์ด์ ๋นจ๋ฆฌ ์ญ์ฌ์์ผ๋ก ์ฌ๋ผ์ง๊ธธ
๋๊ธ ์์ญ