๋ฐ์ํ
์๋ฐ์คํฌ๋ฆฝํธ๋ ECMA Script6 (2015) ์ดํ ์ฌ๋ฌ ํธ๋ฆฌํ ๋ฌธ๋ฒ์ด ๋์ ๋์๋ค.
์ ๋ฌธ๋ฒ ์ค ... ์ ํ์ฉํ ๋ฌธ๋ฒ์ ๋ช ๊ฐ ๋ณผ ์ ์๋๋ฐ, ์ผ๋ฐ์ ์ผ๋ก ์ ์ ์ (...)์ ๋ง์ค์ํ๋ก ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ
'์ด๊ฒ ๋ฑ๋ฑ', ํน์ 'ํน์ ๊ธฐ๋ฅ์ด ์๋ต๋์ด์๋ค' ๋ผ๋ ๋ป์ ๊ฐ์ง๋ ์ง๊ด์ ์ธ ํํ์์ด๋ผ๊ณ ํ ์ ์๋ค.
๋ํ์ ์ผ๋ก ์ด ์ ์ ์ (...) ์ ํ์ฉํด์ ํธ๋ฆฌํ๊ฒ ์ฝ๋ฉํ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ ์ธ ๊ฐ์ง๋ฅผ ์๊ฐํ๋ค.
1๏ธโฃ Rest Parameter (๋๋จธ์ง ๋งค๊ฐ๋ณ์)
- Rest Parameter ๋ ๋ง ๊ทธ๋๋ก Rest(๋๋จธ์ง)์ ์ญํ ์ ํ๋ค.
- ํจ์ ์์ฑ ์ ๋งค๊ฐ๋ณ์์ ๊ฐ์๋ฅผ ์ง์ ํ์ง ์๊ณ ํจ์ ์ฌ์ฉ ์ ์์ฑ๋ arguments ์ ๋ ฅ๊ฐ์ ๋ชจ๋ ๋ฐฐ์ด๋ก ๋ฐ์์ค๋ค.
- ์ฌ์ฉ ๋ฐฉ๋ฒ์ ํจ์ ์์ฑ ์ parameter ์ ์ ... ์ ๋ถ์ฌ์ฃผ๋ ๊ฒ!
- Rest Parameter๋ ํญ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์์น ์์ผ์ผ ํ๋ค.
- ํด๋น ๊ธฐ๋ฅ์ ์ฅ์ ์ ํจ์์ ์ธ์๋ฅผ ๋์ ์ผ๋ก ์ฒ๋ฆฌ ํ ์ ์๋ค๋ ๊ฒ!
function showFruits(...fruits) { // Rest Parameter
console.log(fruits);
}
showFruits("๐", "๐", "๐"); // ["๐", "๐", "๐"]
2๏ธโฃ Spread Syntax (์ ๊ฐ ๊ตฌ๋ฌธ)
- Spread Operator ๋ผ๊ณ ๋ ํ๋ Spread Syntax๋ ๋ง ๊ทธ๋๋ก 'ํผ์น๋ค'. '๋์ด๋จ๋ฆฐ๋ค' ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์๋ฅผ ํ์ฅํ ๋ ์ฌ์ฉ.
- ๋์์ ์ด๊ฑฐ๊ฐ๋ฅํ ํ์(iterable)์ด์ด์ผ ํ๋ค.
- Spread Syntax๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ณธ์ ๊ฐ์ ๋ณํ์ํค์ง ์๊ณ ์์ฒด ์์ฑ์ธ Property ๊ฐ๋ง ๊ทธ๋๋ก ๋ณต์ฌํด ์ฌ ์ ์๋ค.
- ๊ธฐ์กด์ Object.assign() ๋ฉ์๋์ ๋น์ทํ ์ญํ ์ด์ง๋ง ์ฌ์ฉ์ ํจ์ฌ ํธ๋ฆฌํด์ง Sugar Syntax!
ํ์ง๋ง ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๋ณต์ฌํ ๋ Prototype ๊น์ง ๊น์ ๋ณต์ฌ๊ฐ ๋์ง๋ ์์ผ๋ฉฐ ๊ธฐ๋ฅ์ ์์ ๋์ฒดํ์ง๋ ๋ชปํ๋ฏ๋ก
์์ ๋ณต์ฌ๋ฅผ ํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. - ์ฃผ๋ก ๊ฐ์ฒด์ ๊ฐ์ ๋ณต์ฌ, ์์ ํ๊ฑฐ๋, ๋ณํฉํ๋ ์์ ์ ํ ๋ ์ฌ์ฉํ๋ค.
let fruits1 = ["๐", "๐"];
let fruits2 = ["๐", "๐"];
// fruits1 ๊ณผ fruits2๋ฅผ Spread Syntax๋ก ๋ณํฉ
let allFruits = [...fruits1, ...fruits2];
console.log(allFruits); // ["๐", "๐", "๐", "๐"]
3๏ธโฃ Destructuring Assignment (๊ตฌ์กฐ ๋ถํด ํ ๋น)
- Destructuring Assignment ๋ ๋ง ๊ทธ๋๋ก ๊ธฐ์กด ๊ตฌ์กฐ๋ฅผ ๋ถํดํ๋ค, ํด์ฒดํ๋ค๊ณ ํด์ํ๋ฉด ๋๋ค.
- ๊ตฌ์กฐ๋ถํด ํ ๋น์ 'ํ๊ดด'๋ก ํด์ํ ์๋ ์๋ ๋ฐ ์ฌ์ฉํด๋ ์๋ณธ์๋ ์ํฅ ์์ผ๋ ์์ฌ!
- ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ์ ํด์ฒดํ์ฌ ๊ทธ ๊ฐ์ ๊ฐ๋ณ ๋ณ์์ ํ ๋นํ๋ค.
- JavaScript ์์๋ React์์๋ ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํ ๋ ์ ๋ง ๋ง์ด ์ฌ์ฉ๋๋ ์๋ฃ ๊ตฌ์กฐ!
- ์ผํ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ํ์ง ์์ ๋ฐฐ์ด ์์๋ฅผ ๋ฒ๋ฆด ์ ์๋ค.
// ์ผํ๋ฅผ ํตํด ๋ฐฐ์ด index ๊ฑด๋๋ฐ๊ณ ํ ๋น
let [apple, ,banana] = ["๐", "๐ฅ", "๐"];
console.log(banana); // ๐
// Rest Parameter๋ก ๋๋จธ์ง ์์ ๊ฐ์ ธ์ค๊ธฐ
let [name1, name2, ...rest] = ["JAY", "PAUL", "SOPHIE", "arial", "Amy"];
// ๊ฐ์ฒด์ key๊ฐ์ ๋ณ์๋ช
์ผ๋ก ํ ๋น
let {name, age} = {name: "JAY", age: 11};
console.log(name); // JAY
๐๐ปโ๏ธ ์์ฝ
- ...(์ ์ ์ ) ์ ํ์ฉํ ๊ฐ๋ ์ฑ ์ข์ ๋ฌธ๋ฒ!
- Rest Parameter(๋๋จธ์ง ๋งค๊ฐ๋ณ์)๋ ํจ์์ ๋งค๊ฐ๋ณ์๋ก, ์ ํด์ง์ง ์์ ์์ ์ธ์๋ค์ ๋ฐฐ์ด๋ก ๋ฐ์์ฌ ์ ์๊ฒ ํ๋ค.
- Spread Syntax(์ ๊ฐ ๊ตฌ๋ฌธ)๋ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์๋ฅผ ํ์ฅํ ๋ ์ฌ์ฉํ๋ค.
๋ฐฐ์ด์ ๋ณต์ฌ๋ ๊ฐ์ฒด์ ๋ณํฉ ๋ฑ์์ ์ ์ฉ! - Destructuring Assignment(๊ตฌ์กฐ ๋ถํด ํ ๋น)๋ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ์ ํด์ฒดํ์ฌ ๊ทธ ๊ฐ์ ๊ฐ๋ณ ๋ณ์์ ํ ๋นํ๋ ๋ฐ ์ฌ์ฉํ๋ค.
๋ฐ์ํ