🪐 배열, 객체를 const로 선언했는데 요소나 속성을 추가할 수 있는 이유에 대해서 설명해주세요.
Const 변수에 할당된 값은 바뀌지 않지만, 배열/객체가 변수에 할당될 때에는 배열/객체의 요소(값) 자체가 아니라 주소(이 값은 불변, 상수)가 할당되기 때문입니다.
- const는 변하지 않는 상수를 선언하는 키워드이며, 이 상수의 값은 재할당할 수 없으며 다시 선언할 수도 없습니다.
- 그러나 배열, 객체는 참조자료형이며, 참조 값은 변수에 주소를 할당합니다.
- 숫자, 문자열 등의 원시 자료형은 stack 영역에 값 자체가 저장되지만 배열, 객체, 함수 등의 참조자료형은 heap 영역에 값이 저장되고, stack에는 heap에 저장된 데이터의 주소만 저장됩니다.
- 따라서 실제 배열 요소들은 push나 pop으로 변경이 가능하고 참조된 주소는 변경되지 않으므로 const사용이 가능한 것입니다.
- 하지만, const로 선언된 객체나 배열 전체를 다른 객체나 배열로 대체하는 것은 불가능합니다. 즉, const로 선언된 변수에 다른 객체나 배열을 할당하려고 하면 에러가 발생합니다.
- 따라서, const는 객체나 배열의 내부 요소나 속성을 수정하는 것은 가능하지만, 객체나 배열 전체를 대체하는 것은 불가능하다는 것을 알 수 있습니다.
댓글