[JAYโŒจ๏ธJS] JS ์‹ ๋ฌธ๋ฒ•! (...) Rest Parameter, Spread Syntax, Destructuring Assignment๋ฅผ ํ•œ๋ฒˆ์— ์•Œ์•„๋ณด์ž!

2023. 9. 8. 16:41ใ†javascript

๋ฐ˜์‘ํ˜•

 

 

 

 

[JAYโŒจ๏ธJS] JS ์‹ ๋ฌธ๋ฒ•! (...) Rest Parameter, Spread Syntax, Destructuring Assignment๋ฅผ ํ•œ๋ฒˆ์— ์•Œ์•„๋ณด์ž!

 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” 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(๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น)๋Š” ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ํ•ด์ฒดํ•˜์—ฌ ๊ทธ ๊ฐ’์„ ๊ฐœ๋ณ„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•