인프런 커뮤니티 질문&답변
const 배열에 값 추가, 삭제, 변경 문의
해결된 질문
작성
·
28
0
강의 ID 330604
22.배열에 요소 추가/제거하기 - push, pop, unshift, shift
위 강의 내용에 질문있습니다.
배열에 const를 사용했는데, const는 상수라 값 변경이 안되는 걸로 아는데 값을 넣고 빼고 변경할 수 있더라구요.
왜 그런지 알 수 있을까요?
블로그를 찾아봐도 딱히 잘 이해가 안되요
답변 1
0
안녕하세요! keepgoingje님!
해당 질문은 변수가 실제 저장되는 위치와 관련이 있어요!
다음과 같이 입력된 코드는 어떻게 변수를 저장하게 될까요?const 친구들 = ["철수", "영희", "훈이"]
String, Number, Boolean의 경우에는 쉽게 저장이 가능하지만,
객체, 배열과 같이 많은 녀석들을 함께 저장하는 변수는 내부적으로 저장 방식이 달라져요!
(여유가 많이 있는 다른 공간에 저장을 해 놓고, 그 공간의 메모리주소를 변수에 저장해 놓는 방식이랍니다!)
그림으로 표현하면 다음과 같아요!

따라서, const 친구들 = ["철수", "영희", "훈이"] 의 경우,
"친구들" 변수가 const인 것이지,
["철수", "영희", "훈이"] 배열이 const인 것은 아니에요!
그러므로, const "친구들" 변수에 담긴 메모리주소 변경하는 것은 불가능하지만,
["철수", "영희", "훈이"] 배열을 변경하는 것은 가능하답니다!^^
=======================================
실습) 아래의 그림으로 이해하세요!
1. 아래의 변수 선언은 다음의 그림과 같이 저장됩니다.const 친구들 = ["철수", "영희", "훈이"]

2. 이미 const로 만들어진 친구들 변수에 저장된 값을 바꾸는 것은 불가능해요!친구들 = ["맹구", "짱구"]

3. 하지만, 배열과 객체가 저장되어 있는 장소는 const와는 상관이 없으므로, 수정 가능합니다.

5. 만약, 이러한 상황아래 객체와 배열이 저장된 영역까지도 수정 불가능을 원하시는 상황에서는
해당 객체를 얼리는 방법이 있어요!
* 얼리기: Object.freeze(친구들) => 실행하면, 수정되지 않음.(수정하여도 에러는 안나지만 수정이 안되어있음)





