js

javascript ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ „๊ฐœ ๊ตฌ๋ฌธ(Rest parameters, Spread syntax)

์œถโ‰ 2022. 10. 28. 17:31

* ์ธ์ˆ˜ ์ „๋‹ฌ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋„˜๊ฒจ์ฃผ๋Š” ํ•จ์ˆ˜์˜ ์ธ์ˆ˜ ๊ฐฏ์ˆ˜๋Š” ์ œํ•œ X

์ธ์ˆ˜์˜ ๊ฐฏ์ˆ˜๋Š” ์ •ํ•ด๋†“๊ณ  ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋„ ์‹ค์ œ ํ˜ธ์ถœ ์‹œ ์ •ํ™•ํžˆ ๊ทธ ๊ฐฏ์ˆ˜๋ฅผ ๋งž์ถฐ ์ค„ ํ•„์š” X

์•„๋ฌด๊ฒƒ๋„ ์ „๋‹ฌํ•˜์ง€ ์•Š์•„๋„ ๋จ -> undefined๋กœ ๋‚˜์˜ด(์—๋Ÿฌ๋ฐœ์ƒ x)

function showName(name){
  console.log(name);
}
showName('Mike'); //'Mike'
showName('Mike','Tom'); //'Mike'
showName(); //undefined

ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•
1. arguments๋กœ ์ ‘๊ทผ: ๊ณผ๊ฑฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€

2. ๋‚˜๋จธ์ง€ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์‚ฌ์šฉ: ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ• ์žˆ์Œ

1. arguments

- ํ•จ์ˆ˜๋กœ ๋„˜์–ด ์˜จ ๋ชจ๋“  ์ธ์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ

- ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ์ง€์—ญ ๋ณ€์ˆ˜

- length์™€ index๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ์‹ค Array ํ˜•ํƒœ์˜ ๊ฐ์ฒด์— ํ•ด๋‹น

- ๊ทธ๋Ÿฌ๋‚˜ ๋ฐฐ์—ด์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Œ( forEach, map ์‚ฌ์šฉํ•  ์ˆ˜ x)

function showName(name){
  console.log(arguments.length);
  console.log(arguments[0]);
  console.log(arguments[1]);
}
showName('Mike','Tom'); //2 //'Mike'//'Tom'

 

2. ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜(Rest parameters)

- ๊ฐ€๊ธ‰์  ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๊ถŒ์žฅ

- ์ •ํ•ด์ง€์ง€ ์•Š์€ ๊ฐฏ์ˆ˜์˜ ์ธ์ˆ˜๋ฅผ ๋ฐฐ์—ด๋กœ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์Œ
- ... ๋ฅผ ์ฐ๊ณ  ๋ฐฐ์—ด ์ด๋ฆ„์„ ์ง€์ •
- ...names ๋ฐฐ์—ด ์•ˆ์— ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋“ค์ด ๋“ค์–ด๊ฐ

function showName(...names){
  console.log(names);
}
showName();//[]
showName('Mike');//['Mike']
showName('Mike','Tom'); //(2) ['Mike','Tom']

 

์˜ˆ์‹œ1) ์ „๋‹ฌ ๋ฐ›์€ ๋ชจ๋“  ์ˆ˜ ๋”ํ•˜๊ธฐ

function add(...numbers) {
  let result = 0;
  numbers.forEach((num) => (result += num))
  console.log(result);
}
add(1,2,3); //6
add(1,2,3,4,5,6,7,8,9,10); //55
function add(...numbers) {
  let result = numbers.reduce((prev, cur) => (prev += cur))
  console.log(result);
}
add(1,2,3); //6
add(1,2,3,4,5,6,7,8,9,10); //55

์˜ˆ์‹œ2) user ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ

- ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์ฒซ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ํ•˜๊ธฐ

- ๋‚˜๋จธ์ง€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ํ•ญ์ƒ ์ œ์ผ ๋’ค์— ๋ฐฐ์น˜ํ•˜๊ธฐ

function User(name, age, ...skills){
  this.name = name;
  this.age = age;
  this.skills = skills;
}
const user1 = new User('Mike', 30, 'html','css')
const user2 = new User('Tom', 20, 'Js','React')
const user3 = new User('Jane', 10, 'English')

console.log(user1) //User {name: 'Mike', age: 30, skills: Array(2)}
console.log(user2) //User {name: 'Tom', age: 20, skills: Array(2)}
console.log(user3) //User {name: 'Jane', age: 10, skills: Array(1)}

* ์ „๊ฐœ๊ตฌ๋ฌธ(Spread syntax)

- ๋ฐฐ์—ด

let arr1 = [1,2,3];
let arr2 = [4,5,6];

let result = [0, ...arr1, ...arr2,7,8,9];
console.group(result) //(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

- ๊ฐ์ฒด

let user = {name:'Mike'}
let mike = {...user, age:30}

console.log(mike) //{name: 'Mike', age: 30}

- ๋ณต์ œ

let arr = [1,2,3];
let arr2 = [...arr]; //[1,2,3]

let user = {name:'Mike', age:30};
let user2 = {...user};

user2.name="Tom";

console.log(user.name); //Mike
console.log(user2.name); //Tom

์˜ˆ์‹œ1)  arr1์„ [4,5,6,1,2,3]์œผ๋กœ
- reverse๋ฅผ ์ด์šฉํ•ด arr2๋ฅผ ์—ญ์ˆœ์œผ๋กœ ๋งŒ๋“ค์–ด ์คŒ

let arr1 = [1,2,3];
let arr2 = [4,5,6];
arr2.reverse().forEach((num) => {
  arr1.unshift(num);
});
console.log(arr1)//(6) [4, 5, 6, 1, 2, 3]

์ด๋ฅผ ์ „๊ฐœ๊ตฌ๋ฌธ์œผ๋กœ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ ๊ฐ€๋Šฅ

let arr1 = [1,2,3];
let arr2 = [4,5,6];
arr1 = [...arr2, ...arr1];
console.log(arr1)//(6) [4, 5, 6, 1, 2, 3]

-> ๊ฐ์ฒด์ผ ๊ฒฝ์šฐ ์˜ค๋ธŒ์ ํŠธ ์‚ฌ์šฉ ์‹œ

let user = {name: "Mike"};
let info = {age: 30};
let fe = ["JS","React"];
let lang = ["Korean","English"];
user = Object.assign({},user,info,{
  skills:[],
})
fe.forEach((item) => {
  user.skills.push(item);
});
lang.forEach((item) => {
  user.skills.push(item);
});
console.log(user);
//{name: 'Mike', age: 30, skills: Array(4)}
//age: 30
//name: "Mike"
//skills: (4) ['JS', 'React', 'Korean', 'English']

-> ๊ฐ์ฒด์ผ ๊ฒฝ์šฐ ์ „๊ฐœ๊ตฌ๋ฌธ ์‚ฌ์šฉ ์‹œ

let user = {name: "Mike"};
let info = {age: 30};
let fe = ["JS","React"];
let lang = ["Korean","English"];

user = {
  ...user,
  ...info,
  skills: [...fe, ...lang],
};
console.log(user);
//{name: 'Mike', age: 30, skills: Array(4)}
//age: 30
//name: "Mike"
//skills: (4) ['JS', 'React', 'Korean', 'English']