원시형 자료 타입은 변수를 다른 변수에 저장하거나 재할당할 때마다 값을 복사
한다.
const number = 1;
const num2 = number;
console.log(num2);
//1
num2를 생성하고 값으로 number를 할당해보자.
참조형 자료 타입은 다른 변수에 저장하거나 재할당할 때 값을 참조
한다.
const person = {
name: 'Euna'
}
const secondPerson = person;
console.log(secondPerson);
/*
[object Object] {
name: "Euna"
}
*/
secondPerson을 생성하여 값으로 person 객체를 할당해보자.
const person = {
name: 'Euna'
}
const secondPerson = person;
console.log(secondPerson);
/*
[object Object] {
name: "Euna"
}
*/
person.name = 'BTS';
console.log(secondPerson);
/*
[object Object] {
name: "BTS"
}
*/
person.name을 BTS로 바꾸고 secondPerson을 콘솔에 다시 찍어보자.
배열의 경우도 마찬가지이다.
🌟 아주아주 중요한 포인트!!!
- 참조형 자료 타입을 다루는 것은 리액트에서 아주 중요하다.
위의 예시와 같이 참조값을 복사해버리면 예상치 못한 결과를 초래할 수도 있다.
- 만약 객체나 배열을 참조값으로 복사해 버린다면 한 앱에 있는 주소에서 객체를 조작해 버릴 수 있는 문제가 발생한다.
- 또한 실수로 앱의 다른 주소에 있는 같은 객체를 다르게 사용하도록 조작해 버릴 수도 있다.
따라서 불변성(Immutable)으로 복사하는 방법을 꼭! 숙지하도록 하자.
const person = {
name: 'Euna'
}
const secondPerson = {
...person
}
console.log(secondPerson);
/*
[object Object] {
name: "Euna"
}
*/
person.name = 'BTS';
console.log(person);
/*
[object Object] {
name: "BTS"
}
*/
console.log(secondPerson);
/*
[object Object] {
name: "Euna"
}
*/
person 객체를 secondPerson객체로 복사할 때, 변하지 않는 방법(Immutable)으로 객체로 복사해보자.
{}
를 사용하여 새롭게 객체를 생성하고 person객체의 프로퍼티를 스프레드...
한다.