- 《 원시형과 참조형 》의 구분 기준은 값의 저장 방식과, 불변성 여부이다.
- 불변성이란? 한 번 생성된 값이 변경되지 않는 특성을 말한다.
불변값과 불변성 (with 원시형 데이터)
a라는 변수가 abc에서 abcdef가 되는 과정을 통해 불변성을 유추해보자. var a = 'abc';
a = a + 'def';
코드가 실행되면 'def'가 기존의 'abc'에 추가되어 'abcdef'가 된다.➡️ 즉, 변수 a의 값이 변경되었지만, 실제로 데이터가 변경된 것이 아니라 새로운 값이 할당된 것이므로 변수 a의 불변성이 유지된다.
가변값과 가변성 (with 참조형 데이터)
var obj1 = {
a: 1,
b: 'bbb,
};
obj1.a = 2;
를 변경해보자var obj1 = {
a: 1,
b: 'bbb',
};
// 데이터를 변경해보자
obj1.a = 2;
정리
var obj = {
x: 3,
arr: [3, 4, 5],
}
위에서 했던 것과 비슷하다!
// 1. 기본형 및 참조형 데이터의 선언
var a = 10; // 기본형
var obj1 = { c: 10, d: 'ddd' }; // 참조형
// 2. 변수 복사
var b = a; // 기본형
var obj2 = obj1; // 참조형
// 3. 값 변경
b = 15;
obj2.c = 20;
var a = 10; // 기본형
var obj1 = { c: 10, d: 'ddd' }; // 참조형
var b = a; // 기본형
var obj2 = obj1; // 참조형
b = 15;
obj2.c = 20;
obj1 === obj2;
기본형과 참조형의 변수 복사 시 주요한 절차의 차이점 정리
영향 없음
obj1까지 변경이 됨
객체의 프로퍼티(=속성)에 접근해서 값을 변경하는 것이 아니라 객체 자체를 변경하는 방식으로 값을 바꿔보자!
//기본형 데이터
var a = 10;
var b = a;
//참조형 데이터
var obj1 = { c: 10, d: 'ddd' };
var obj2 = obj1;
b = 15;
obj2 = { c: 20, d: 'ddd'};
obj1 !== obj2;