코드스테이츠 줌 라이브 세션 중 누군가가 객체는 const로 선언해도 왜 값을 바꿀수 있는가? 라고 질문했다.
나름대로 생각을 정리해봤다.
먼저 자료형,
이를 통해서 const는 단지 첫 선언된 주소값을 바인딩 하는것이 아닐까? 라는 점이다.
원시자료형은
let a = 123; // 식별자 a의 값 주소 @1001
a = 'abc'; // 식별자 a의 값 주소 @1002
이런식으로 값자체를 바꾸는게 아닌 값을 검색해서 없을경우 새로운 주소를 만들어 값을 할당하고, 만약
let a = 123; // 식별자 a의 값 주소 @1001
let b = 123; // 식별자 b의 값 주소 @1001
다른 변수가 동일 한 값을 선언하면 그 주소를 가져온다.
객체는
const obj = {
// 식별자 obj에 객체 주소 @5001을 할당 후 @5001의 주소는 @7001,@7002
a: 1, // @7001 값에 a식별자를 갖고 주소는 @1001
b: 'bbb' // @7002 값에 b식별자를 갖고 주소는 @1002
}
이런식이다.
그러므로 객체의 프로퍼티를 접근해서 값을 변경하는 것은
첫 번째 obj가 선언된 메모리의 주소값에 영향이 가지 않는다.
obj 자체의 주소를 건드려보면?
const obj1 = {
a: 1,
b: 'bbb'
}
const obj2 = {
a: 2,
b: 'ccc'
}
obj1 = obj2; // const 선언 에러
이는 obj1의 주소를 직접적으로 obj2로 바꾸는것으로 const를 재할당 했을때 나오는 에러가 나온다.
그러므로, const는 식별자와 함께 저장된 주소를 변경하지 않는다.
가 내 추론이다.