내일배움캠프 동영상 강의/내배캠_ React 입문

template literals, spread와 rest

콛 다이어리 2024. 8. 9. 01:26

spread perators
객체나 배열을 복사할 때 많이 쓰임
배열이나 객체를 합칠 때 많이 쓰임


const originalUser = {
name = "조희진"
age = 26,
};
복사해야 할 경우
const updatedUser = originalUser; 

복사 X

참조하는 위치를 변경 O

불변성과도 관련

그래서 Spread Operators가 나옴

originalUser에 조희진과 26이라는 value를 가지고 있음


updatedUser.name = "조은진";
console.log("원본 =>" updatedUser); 

// name: '조은진', age: 26
console.log("원본 =>" originalUser); 

// name: '조은진', age: 26

UpdatedUser는 OriginalUser의

주소값을 복사했기 때문에
OriginalUser와 UpdatedUser의 주소값은 같음
우리는 UpdatedUser를 수정했지만

얘가 같이 바라보고 있었던 것을 수정했기 때문에

OriginalUser까지 변경되는 것처럼 보이는 것


자바스크립트에서 객체나 배열을 복사할 때

불변성을 지켜야된다면 

const updatedUser = originalUser; 로 복사하는 것이 아니라 
const updatedUser = {...originalUser;}

이런식으로 복사해야 함
name: "조희진", age: 26만 남게되고

이게 Spread Operated이며
const updatedUser = { name: "조희진", age: 26 }; 

얘는 직접 값을 입력함
UpdatedUser가 참조하는 값이

원래있었던 originalUser와 완전히 다르다는 것
 OriginalUser를 이용해 새로운 UpdatedUser라는 객체를 생성함
즉, 수정해야 할 파일를 수정하려고 한거지만 원본 파일까지 삭제된 것임

const first = [1, 2, 3];
const second = [4, 5, 6];
const combinedArray = [...first, ...second];

rest operators
... 변수명
spread operators와 비슷
함수의 매개변수

객체 분해 할당 시, 여러 값을 그룹핑

배열로 들어오지 않는 인풋들을 모으는 방

function sum (numbers) {
return numbers.reduce((acc, cur) => acc + cur);
const result = sum([1, 2, 3, 4, 5]);
console.log(result); // 15

 

const result의 값에 배열을 쓰고싶지 않으면

 

function sum(1, 2, 3, 4, 5) {

      return numbers.reduce((acc, cur) => acc + cur);

}

 

numbers에는

numbers(first, second, third, forth, fifth)

가 들어감

→ 귀찮음 + return문도 못 사용

그래서 나온게 rest operator

 

사용법:

...변수명

 

function sum(...numbers) {

   return numbers.reduce((acc, cur) => acc + cur);

}

 

const result = sum(1, 2, 3, 4, 5);

console.log(result);

// sum(1, 2, 3, 4, 5)가 numbers로 들어감

 

 

spread perators

const {occupation, name, age, country} = person;

const {occupation, ...rest} = person;

'내일배움캠프 동영상 강의 > 내배캠_ React 입문' 카테고리의 다른 글

DOM  (0) 2024.08.17
화살표 함수, 조건연산자, 단축평가  (0) 2024.08.09
promise, async, await  (0) 2024.08.09
모듈  (0) 2024.08.09
template literals 와 destructuring  (0) 2024.08.09