sugenius
[JavaScript] const 도 수정이 가능하다 본문
강의를 보며 따라하다가 const 배열 값을 수정하는 걸 보고 궁금증이 생김.
내가 알기론 상수 값으로 var,let 같이 수정할 수 없는 타입으로 알고 있는데 ...
>> 출처 : chat gpt
const로 선언된 변수는 참조를 변경할 수 없는 변수를 의미합니다. 그러나 참조된 객체나 배열의 내부 내용은 수정할 수 있습니다. 이것은 JavaScript에서 const가 변수 자체를 상수로 고정하지만, 객체나 배열의 내부 상태는 변경 가능하기 때문입니다.
예제 1: 객체 내부 수정
const obj = { name: "Alice" };
obj.name = "Bob"; // 객체의 속성 변경은 가능
console.log(obj.name); // 출력: Bob
예제 2: 배열 내부 수정
const arr = [1, 2, 3];
arr.push(4); // 배열에 요소 추가 가능
console.log(arr); // 출력: [1, 2, 3, 4]
반대로 참조 변경은 불가능
const obj = { name: "Alice" };
// obj = { name: "Bob" }; // 에러: TypeError: Assignment to constant variable
이유: 메모리 참조 방식
const는 변수의 참조 자체를 변경할 수 없도록 고정합니다. 하지만, 객체나 배열은 메모리 주소를 참조하는 구조이므로, 해당 주소가 가리키는 데이터의 내용을 변경할 수 있습니다.
활용 팁
- 값이 변하지 않는 변수에는 const를 사용하세요.
- 객체나 배열의 내부를 수정할 계획이 있다면 const를 사용할 수 있지만, 이를 피하고 싶다면 Object.freeze() 또는 Immutable.js 같은 라이브러리를 활용할 수 있습니다.
추가 궁금증
- 메모리 참조 방식? = 메모리 주소 참조
const obj = { name: "Alice" }; // obj는 객체 { name: "Alice" }의 메모리 주소를 참조