[Core JavaScript. 핵심 개념과 동작원리 이해하기]
변수(variable)
➡️ 바꿀 수 있음
상수(constant)
➡️ 바꿀 수 없음 ≠ 불변값
---> 여기서 변경 가능성의 대상은 변수 영역
메모리.
한번 데이터 할당이 이루어진 변수 공간에 다른 데이터를 재할당할 수 있는지 여부가 관건이다.
불변성 여부를 구분할때의 변경 가능성의 대상은 데이터 영역
메모리이다.
var a = 'abc'; // 변수 a에 abc를 할당
a = a + 'def'; // ⭐️기존의 'abc'를 바꾸는게 아니고, 새로운 문자열 'abcdef'를 만들어 a에 저장한다.
var b = 5; // 변수 b에 5를 할당
var c = 5; // ⬆️변수 b를 만들며 만들어 둔 데이터가 있으므로 이를 재활용
b = 7; // ⭐️기존에 저장된 5를 바꾸는 것이 아니라, 기존에 저장된 7이 있다면 그것을 재활용하고 없다면 새로 만들어서 b에 저장하는 것.
즉, 기존에 저장된 abc와 5는 다른 값으로 변경할 수 없다. ➡️ 불변값의 성질.
한번 만들어진 값은 가비지 컬렉팅을 당하지 않는 한 영원히 변하지 않는다.
기본형 데이터는 모두 불변값이지만, 참조형 데이터가 모두 가변값인 것은 아니다.
참조형 데이터의 할당 과정을 알아보자.
var obj1 = {
a: 1,
b: 'bbb'
};
➡️ 기본형 데이터와의 차이는 객체의 변수(프로퍼티) 영역이 별도로 존재한다는 점이다. 여기서 객체가 별도로 할애한 영역은 변수 영역일 뿐 '데이터 영역'은 기존의 메모리 공간을 그대로 활용하고 있다. 데이터 영역에 저장된 값은 모두 불변값이다.
but 변수에는 다른 값을 얼마든지 대입할 수 있다.(4번)
이때문에 참조형 데이터는 불변하지 않는다(가변값이다)라고 하는 것.