프로그래밍/javascript

[자바스크립트]spread 펼침연산자 & rest 나머지 연산자

znvlcm 2021. 3. 2. 17:31

어떤 객체나 배열의 값을 복사하고 싶을 때 쓰는 연산자.

배열 또는 객체의 변수명 앞에 '...'을 붙여서 만든다. 

 

1. spread 펼침연산자 

c++언어를 공부할 때 복사생성자가 필요한 이유가 떠오르는 연산자다. 

 

예를 들어 A가 닭꼬치 집을 차렸는데 손님이 자기는 양념치킨맛 닭꼬치를 먹고 싶다고 한다. 

그럼 A는 기존의 닭꼬치메뉴에 양념치킨맛 닭꼬치를 추가한다. 

 

const 양념닭꼬치 = 기본닭꼬치;

기본닭꼬치.맛 = '양념치킨 맛';

이라고 하면 이건 메뉴를 추가한게 아니라 기본닭꼬치를 양념닭꼬치로 바꾼 것이다. 

 

기본 닭꼬치에 양념만 추가하고 싶을 때 이 spread연산자(펼침연산자)를 쓴다. 

 

const 닭꼬치 ={

    고기 : '닭',

    조리 : '구이',

}

 

const 양념닭꼬치 ={

    ...닭꼬치,

    양념 : '양념치킨맛'

}

 

console.log(닭꼬치); // { '고기': '닭', '조리': '구이' }

console.log(양념닭꼬치);//{ '고기': '닭', '조리': '구이', '양념': '양념치킨맛' }

 

 

이렇게 하면 기본닭꼬치의 의 속성값을 모두 가진 위에 맛을 추가시킨 메뉴를 정의할 수 있다 

 

즉 대입연산자를 쓰면 값은 참조값을 보기 때문에 한 객체에 대한 편집이 이뤄지지만 

펼침연산자를 쓰면 값만 복사하고 별도의 객체를 만들 수 있다.

기본닭꼬치의 값을 가져와 양념닭꼬치의 값에 덮어씌워준다.

 

기존의 객체는 그대로 둔 채로, 해당객체의 값만 복사해 새로운 객체에 넣어줄 때 사용한다. 

그리고 이것은 배열에도 적용할 수 있다. 

 

const array = [1,2,3];

const new_array = [...array, 5, ...array, ...array];

를 하면 

console.log(array);//[1,2,3] 기존 배열은 그대로

console.log(new_array) : // [1,2,3,5,1,2,3,1,2,3] array배열의 값만 복사해서 추가됨

 

함수 인수로서 유용하게 사용할 수 있다.

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

fun(...params);

 

2. rest 연산자

 

rest연산자는 다수의 속성을 가진 객체중에서 특정 속성을 뺀 나머지 속성을 가진 새로운 개체를 생성하고 싶을 때 쓴다. 

 

위의 양념치킨맛 닭꼬치를 양념만 묻힌채로 준비만 하고 싶다면 조리속성을 빼면된다. 

이때 쓰는 것이 바로 rest연산자이다. 앞에 빼고 싶은 속성을 나열한뒤 뒤쪽에 '...'와 새로운 개체이름을 넣어주면 된다.

const {조리, ...준비된양념꼬치} = 양념닭꼬치;

console.log(준비된양념꼬치) ;//{ '고기': '닭', '양념': '양념치킨맛' }

 

이 연산자 역시 배열에서 쓸 수 있다. 

const array = [1,2,3];

const [first, ...rest] = array;

 

console.log(first); // 1

console.log(rest);// [2,3]

 

이 레스트 연산자는 함수의 파라미터 수가 일정하지 않을 때 유용하게 사용할 수 있다 

function fun (...param){

.....

 

 

 

 

 

 

 

 

 

728x90