- 불변값은 한 번 생성되면 그 값이 변하지 않는 값을 의미한다.
- 불변값은 데이터 메모리 영역과 관련이 있다. 이는 변수가 메모리에 선언되고, 그 변수에 할당된 데이터의 값이 바로 할당 되는 것이 아니라 데이터의 주소값이 할당된다. [**중요]**
let a = "jeongjoo";
a = "lee" + a;
[사진 참고용 코드랑 다름]
- 위 코드에서 변수 **
a
**에 **'jeongjoo'
**라는 문자열이 할당되었다가 **'lee'
**를 추가하여 **'leejeongjoo'
**로 변경되었다. - 이 경우, 메모리에서는 기존
'jeongjoo'
에 **'lee'
**를 추가하는 것이 아니라, 아예 새로운 데이터 메모리 공간을 확보하고 **'leejeongjoo'
**를 할당하고 새로운 주소 값을 a 변수에 재할당한다. - 기존 **
'jeongjoo'
**라고 선언되어 있는 값은 가비지 컬렉터에 의해 메모리에서 제거된다.
따라서 자바스크립트에서 불변값은 데이터 메모리 영역과 관련이 있으며, 한 번 생성된 값은 변경되지 않는다. 이는 원시 데이터 타입(Primitive Type)에 해당하며, 이러한 원시 데이터 타입은 변수에 값이 저장되고 불변한다.
참조 데이터 타입(Reference Type)은 가변값을 가진다.
let obj1 = {
a: 1,
b: "bbb",
};
- obj1은 Object 타입으로 참조 타입이다. 해당 변수는 1002번지에 변수 영역에 저장되고 데이터 영역에는 원시타입과 다르게 Object가 가지고 있는 프로퍼티의 길이 만큼 프로퍼티 변수 메모리 할당 영역의 정보가 저장되어 있다.
- 이 프로퍼티는 다시 각 값을 데이터 영역에서 값을 할당하고, 주소 값을 저장한다. 이에 프로퍼티 값을 변경하고자 했을 떄 obj1의 데이터 참조 5001번지의 주소값은 불변하지만 객체 변수영역의 a프로퍼티의 값이나 b의 값은 변경 시 데이터 주소가 변경이 되기 때문에 가변값이라고 한다.
참조형 데이터 타입은 기본형 데이터 타입과 다른 것은 객체 변수 영역이 별도로 존재함
또한, 데이터 영역에 저장된 값은 모두 불변값이지만, 변수 영역에서는 변수에 다른 값을 얼마든지 대입할 수 있어서 가변값이라고 함. [중요]
[JS] 불변값과 가변값. 불변값 (Immutable Value) | by JeungJoo Lee | CrocusEnergy | Medium
코어자바스크립