본문 바로가기
개발자의 공부방/Frontend

javascript] spread와 rest 연산자

by 쥬니준 2021. 12. 18.
728x90
반응형

자바스크립트의 스프레드 연산자와 rest연산자를 알아본다.

 

 

 

이런 객체가 있다고 가정해본다.

const slime = {
  name: '슬라임'
}

const cuteSlime = {
  name: '슬라임',
  attr: 'cute'
}

const pinkCuteSlime = {
  name : '슬라임',
  attr: 'cute',
  color: 'purple'
}

console.log(slime);
console.log(cuteSlime);
console.log(pinkCuteSlime);

각각 다른 슬라임이지만 공통적인 부분이 보인다. 이 부분을 ... Spread 연산자를 사용해서 중복되는 부분을 사용해본다.

 

const slime = {
  name: '슬라임'
}

const cuteSlime = {
  ...slime,
  attr: 'cute'
}

const pinkCuteSlime = {
  ...cuteSlime,
  color: 'purple'
}

console.log(slime);
console.log(cuteSlime);
console.log(pinkCuteSlime);

위의 코드는 각각의 객체에 있는 특성을 주입한 결과이며, 아래의 코드이며 아래의 코드는 하나의 객체에 특성을 주입시킨 것이다.

 

const slime = {
  name: '슬라임'
}

const cuteSlime = slime;
cuteSlime.attr = 'cute'

const pinkCuteSlime = cuteSlime;
pinkCuteSlime.color = 'pink'

console.log(slime);
console.log(cuteSlime);
console.log(pinkCuteSlime);

console.log(slime === cuteSlime)

 

그리고 스프레드는 배열에서도 사용이 가능하다.

const animals = ['개', '닭', '비둘기']
const anotherAnimals = [...animals, '닭둘기']
//const anotherAnimals2 = animals.concat('닭둘기')

console.log(animals)
console.log(anotherAnimals)
//console.log(anotherAnimals2)

또한 스프레드를 사용한 것과 concat을 사용했을 때와 같은 결과를 나타낸다.

 

스프레드는 중복으로도 사용이 가능하다.

const numbers = [1,2,3,4,5]

const spreadNumbers = [...numbers, 1000, ...numbers];

console.log(spreadNumbers)

 

즉, 스프레드 연산자는 기존 객체를 복사하고 추가할 때 사용한다.

 


다음은 rest 연산자를 알아본다.

 

rest는 스프레드와는 약간 반대되는 개념이다.

const pinkCuteSlime = {
  name : '슬라임',	 //이름
  attr : 'cute',	//속성
  color: 'pink'		//색상
}

const { color, ...rest } = pinkCuteSlime;
//const { attr, ...zz } = rest;

console.log(rest)

//스프레드는 특정 객체나 배열안에 다른 객체에 퍼트린다면
//rest는 반대로 모아둔다.

로그를 찍어보면 color를 제외한 name, attr이 로그에 출력된다.

그리고 ...rest에서 rest는 마음대로 바꿔도 된다.

 

배열에서도 사용이 가능한데 아래의 코드를 보자.

const numbers = [0, 1, 2, 3, 4, 5, 6];

const [one, ...rest] = numbers;

console.log(one)
console.log(rest)

rest를 찍어보면 0을 제외한 모든 숫자가 출력되는 것을 확인할 수 있다.

 

rest는 맨 마지막에 와야한다는 규칙이 있다.

const pinkCuteSlime = {
  name : '슬라임',	 //이름
  attr : 'cute',	//속성
  color: 'pink'		//색상
}

const { ...rest, color } = pinkCuteSlime; //순서가 바뀌면 안된다.

console.log(rest)

SyntaxError: /src/index.js: Rest element must be last element (7:15)

 

...rest의 순서가 바뀌면 위와 같은 SyntaxError가 나타난다.

반응형

댓글0