[๐ŸŒณjavascript] default parameter, rest parameter, spread operator, apply, call

h-a-n-aยท2023๋…„ 3์›” 10์ผ
1

๐ŸŒณjavascript

๋ชฉ๋ก ๋ณด๊ธฐ
10/17

default parameter

๊ธฐ๋ณธ๊ฐ’ ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ (default function parameter)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’์ด ์—†๊ฑฐ๋‚˜ undefined๊ฐ€ ์ „๋‹ฌ๋  ๊ฒฝ์šฐ ์ด๋ฆ„๋ถ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ๊ณ  MDN ๋‹˜๊ป˜์„œ ๋ง์”€ํ•˜์‹ ๋‹ค.

function ์–ด๋–คํ•จ์ˆ˜(a,b=10){
	console.log(a+b)}
์–ด๋–คํ•จ์ˆ˜(1) // 11

function ์–ด๋–คํ•จ์ˆ˜2(a,b=2*5){
  console.log(a+b)} // ์ˆ˜ํ•™์—ฐ์‚ฐ์ž ๊ฐ€๋Šฅ
function ์–ด๋–คํ•จ์ˆ˜3(a,b=a*5){
  console.log(a+b)} // ๋‹ค๋ฅธ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์—ฐ์‚ฐ๋„ ๊ฐ€๋Šฅ
์–ด๋–คํ•จ์ˆ˜(2) // 11

function ์ž„์‹œํ•จ์ˆ˜(){
  return 10}
function ์–ด๋–คํ•จ์ˆ˜4(a,b=์ž„์‹œํ•จ์ˆ˜){
  console.log(a+b)}
์–ด๋–คํ•จ์ˆ˜4(1) //11

arguments

ํ•จ์ˆ˜์˜ ๋ชจ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ์ „๋ถ€ ํ•œ๊บผ๋ฒˆ์— ๋Œ๋Œ ๋ฌถ์–ด์„œ ์™ธ์น˜๋ฉด์„œ ๋‹ค๋ฃจ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ(์ฐธ๊ณ ๋กœ, ES5๋ฌธ๋ฒ•์ž„)

function ์š•์‹ฌ์Ÿ์ดํ•จ์ˆ˜(a,b,c){
  console.log(arguments)}
์š•์‹ฌ์Ÿ์ดํ•จ์ˆ˜(1,2,3) // [1,2,3] ๋น„์Šค๋ฌด๋ฆฌํ•œ ์ž๋ฃŒ๊ฐ€ ์ถœ๋ ฅ๋จ

function ์š•์‹ฌ์Ÿ์ดํ•จ์ˆ˜2(a,b,c){
  for(let i=0;i<arguments.length;i++){
    console.log(arguments[i])}
}
์š•์‹ฌ์Ÿ์ดํ•จ์ˆ˜2(1,2,3) // 1 2 3

arguments์™€ ๋‹ค๋ฅด๊ฒŒ ES6์—์„œ ๋‚˜์˜จ rest ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฌธ๋ฒ•์€ ์ชผ๊ฐœ์„œ ๋‹ด๊ธฐ ๊ธฐ๋Šฅ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ช‡ ๊ฐœ ๋“ค์–ด์˜ฌ์ง€ ๋ฏธ๋ฆฌ ์ง€์ •ํ•  ํ•„์š”๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ํŽธ๋ฆฌํ•˜๋‹ค. ํ•œ๋ฒˆ ์•Œ์•„๋ณด์ž!

rest parameter

function ํŽธ๋ฆฌํ•œํ•จ์ˆ˜(a,b,...rest){
  console.log(rest) }

ํŽธ๋ฆฌํ•œํ•จ์ˆ˜(1,2,3,4,5,6) // [3,4,5,6]

ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์—์„œ ...์— ๋“ค์–ด์˜จ ๋…€์„๋“ค์„ ์ „๋ถ€ ๋‹ค ๋ฌถ์–ด์„œ array์•ˆ์— ๋‹ด์•„์คŒ

์ฃผ์˜์‚ฌํ•ญ

  • ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— ์“ฐ๊ธฐ
  • ํ•œ ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

spread operator

... ์  3๊ฐœ ๋‚˜์—ดํ•˜๋ฉด ๋˜๋Š”๋ฐ, ๊ด„ํ˜ธ์ œ๊ฑฐํ•ด์ฃผ๋Š” ์—ฐ์‚ฐ์ž ์ •๋„๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ฒ„๋‹ค.

const ์ธ์‚ฌ=['hi','there']
console.log(...์ธ์‚ฌ) //hi there

๊ทธ๋Ÿผ ์ด๊ฒƒ์„ ์–ด๋””๋‹ค ์“ฐ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋ƒ~ํ•˜๋ฉด,

array ํ•ฉ์น˜๊ธฐ/๋ณต์‚ฌ

// 	ํ•ฉ์น˜๊ธฐ
const arr=[1,2,3]
const arr2=[4,5,5]
const arr3=[...arr,...arr2]
console.log(arr3) // [1,2,3,4,5,6]
//๋ณต์‚ฌ
const ๋ฐฐ์—ด1=[1,2,3]
const ๋ฐฐ์—ด2=๋ฐฐ์—ด1
console.log(๋ฐฐ์—ด2) //[1,2,3]
๋ฐฐ์—ด1[3]=4
console.log(๋ฐฐ์—ด1) //[1,2,3,4]
console.log(๋ฐฐ์—ด2) //[1,2,3,4]

๋‚˜๋Š” ๋ฐฐ์—ด2์— ์ˆ˜์ •์„ ํ•ด์ค€ ์ ์ด ์—†๋Š”๋ฐ ์™œ [1,2,3,4]๊ฐ€ ๋œ๊ฒƒ์ธ๊ฐ€?
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋“ฑํ˜ธ๋ฅผ ์ด์šฉํ•ด ๋ณต์‚ฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐฐ์—ด1์ด๋ž‘ ๋ฐฐ์—ด2๊ฐ€ ์‚ฌ์ด์ข‹๊ฒŒ ํ•˜๋‚˜์”ฉ ๋‚ด ๊บผ, ๋‹ˆ๊บผ ์ด๋ ‡๊ฒŒ ๊ฐ๊ฐ ๋‚˜๋ˆ ๊ฐ€์ง„ ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ทธ๋ƒฅ ํ•œ๊ฐœ์˜ ๊ฐ’์„ ๋‘˜์ด์„œ ์ €๋ฉ€๋ฆฌ์„œ๋ถ€ํ„ฐ ๋ฏธ์–ด์บฃ๋งˆ๋ƒฅ ์ง€๊ทธ์‹œ ๋ฐ”๋ผ๋ณด๋Š” ์ƒํ™ฉ์ด ์—ฐ์ถœ๋œ๋‹ค.

= ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณต์‚ฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ' ์ €๊ธฐ์— ์žˆ๋Š” ๊ฑฐ๊ฐ€ ๋„ˆ์˜ ๊ฐ’์ด๋ž€๋‹ค' ์ด๋ผ๊ณ  ๊ทธ๋ƒฅ ํ™”์‚ดํ‘œ ํ•˜๋‚˜ ๋˜์ ธ์ค€๊ฑฐ๋‹ค. ๊ทธ๋Ÿผ ๊ทธ๋ƒฅ ํ•˜์—ผ์—†์ด ๊ทธ ๊ฐ’๋งŒ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š”๊ฑฐ๊ตฌ. ...spread operator๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ๋ฏธ์–ด์บฃ ๋ˆˆ๋น› ๋Œ€์‹  ๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜์— ๊ฐ๊ฐ์˜ ๊ฐ’์„ ์ง„์งœ๋กœ ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

const ๋ฐฐ์—ด1=[1,2,3]
const ๋ฐฐ์—ด2=[...๋ฐฐ์—ด1]
๋ฐฐ์—ด1[3]=4
console.log(๋ฐฐ์—ด1) //[1,2,3,4]
console.log(๋ฐฐ์—ด2) //[1,2,3]

object ํ•ฉ์น˜๊ธฐ/๋ณต์‚ฌ

const ๊ฐ์ฒด1 = { a: 1, b: 2 };
const ๊ฐ์ฒด2 = { ...๊ฐ์ฒด1 };
console.log(๊ฐ์ฒด2);//{ a: 1, b: 2 }

//key ๊ฐ’ ์ค‘๋ณต๋  ๊ฒฝ์šฐ ๋‚˜์ค‘์— ๋“ค์–ด์˜จ ๊ฑธ๋กœ ๊ฒฐ์ •๋œ๋‹ค
const ๊ฐ์ฒด1 = { a: 1, b: 2 };
const ๊ฐ์ฒด2 = { a: 4, ...๊ฐ์ฒด1 };
console.log(๊ฐ์ฒด2);//{ a: 1, b: 2 }


const ๊ฐ์ฒด1 = { a: 1, b: 2 };
const ๊ฐ์ฒด2 = {...๊ฐ์ฒด1, a: 4, };
console.log(๊ฐ์ฒด2);//{ a: 4, b: 2 }

์ฐธ๊ณ ๋กœ spread operator๋Š” (ํ•จ์ˆ˜ ์†Œ๊ด„ํ˜ธ), {๊ฐ์ฒด ์ค‘๊ด„ํ˜ธ}, [๋ฐฐ์—ด ๋Œ€๊ด„ํ˜ธ] ์•ˆ์—์„œ๋งŒ ๋ณดํ†ต ์‚ฌ์šฉํ•œ๋‹ค!

apply, call

์˜›๋‚ ์— spread operator ์ƒ๊ธฐ๊ธฐ ์ „์—๋Š” apply, call ์ด์šฉํ–ˆ๋‹ค๋Š”๋ฐ ์˜›๋‚ ๋ฌธ๋ฒ•์ด๊ธดํ•ด๋„ ๊ฐ์ฒด์ง€ํ–ฅ ๋ฐฐ์šธ ๋•Œ ์“ธ๋ชจ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋‹ˆ ์˜ค๋Š˜ ํ•™์Šตํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด์ž....ํ‘

const person={
  ์ธ์‚ฌ: function(){
    console.log(this.name+'์•ˆ๋…•')
}
const person2={
  name:'ํ™๊ธธ๋™'
}

person.์ธ์‚ฌ()๋ฅผ person2์—์„œ๋„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?
person.์ธ์‚ฌ.apply(person2) ์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋˜๋Š”๋ฐ apply๋ฟ๋งŒ ์•„๋‹ˆ๋ผ .call()์ด๋ผ๋Š” ๊ฒƒ๋„ ๋˜‘๊ฐ™์ด ์ž‘์šฉํ•œ๋‹ค. ๋‹ค๋งŒ, ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋„ฃ๋Š” ๋ฐฉ์‹์—์„œ์˜ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค.
.apply๋Š” [], call์€ person.์ธ์‚ฌ().call(person2, 1,2)์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.


  • ์˜ค๋Š˜ ์•Œ๊ฒŒ ๋œ ๊ฒƒ
    reference data type(array,object)์€ ๋ณต์‚ฌํ•  ๋•Œ spread operator๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ ์ค‘ ๊ถ๊ธˆํ•˜๊ฑฐ๋‚˜ ๋” ์•Œ๊ณ  ์‹ถ์€ ๊ฒƒ
    ์–•์€ ๋ณต์‚ฌ/ ๊นŠ์€ ๋ณต์‚ฌ์— ๋Œ€ํ•ด์„œ๋„ ๋” ํ•™์Šตํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ์˜ค๋Š˜์˜ ์†Œ๊ฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณต๋ถ€ ์žฌ๋ฏธ์žˆ์ง€?

ํ—คํ—ค

profile
ํ•˜๋ฃจํ•˜๋ฃจ๊ฐ€ ์—ฐ์Šต์ด๋‹ˆ ๋‚ด์ผ์€ ๋” ๊ฐ•ํ•ด์งˆ ๊ฒ๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€