자바스크립트의 메모리 관리 방식에 있어서 [변수]와 [상수]의 차이점은 뭘까? 불변하다와 불변하지 않다의 차이점은 뭘까?
일단 큰 그림은 스파르타 코딩클럽 [JS 문법 종합반 ] 3주차 데이터 타입 부분 강의자료를 보자. (개인 pc에 저장함,링크는 생략)
말로 설명해 보자. [변수]와 [상수]의 차이점은 메모리에서 변수 영역의 주소값이 바뀔 수 있으면 [변수], 바뀌지 못하면 [상수]다.
변수 부분의 주소값은 항상 메모리의 데이터 영역중 하나를 가리키게 된다. 여기서 [변수]에 대한 변수 영역 메모리라면 어떤 데이터 영역을 가리킬지 그 주소를 바꿔줄 수 있다.
그래서 아래처럼 a 라는 [변수] 에 새로운 값이 할당되면 7이라는 값의 주소가 메모리의 데이터 영역에 새로 생기게 되고 메모리에서 a의 변수 영역은 그 새로 생긴 주소를 가리키게 된다.
var a = 5;
a = 7;
그런데, 이 [변수]의 메모리 영역 중 '불변'하는 영역이 있다. a에 할당된 값이 바뀌었는데 뭐가 불변할까? 기존 5라는 데이터가 들어가 있던 메모리의 데이터 영역이다. 기존에 5가 들어가 있던 데이터 영역 주소를 2003번이라고 해보자. a = 7; 이라는 코드부터는 할당값이 바뀌었지만 2003번에 들어간 데이터가 바뀌는 게 아니다. 주소 2003번과 그 안의 데이터 5는 그대로 '불변하고' 새로운 2004번 주소가 생겨서 거기에 7이 저장된다. 이게 불변성이다.
한가지 특이한 점은 이렇게 불변하는 데이터 영역은 더이상 쓸모가 없어서 가비지 콜렉터가 쓸어간다는 사실이다. 메모리 청소부다. a 는 더이상 5가 아니라 7이므로 5라는 데이터는 가비지가 된 것이다.
반대로 불변하지 않으려면 어떻게 되어야 할까? 이건 질문으로 남겨두기로 한다.
'자바스크립트 리뷰' 카테고리의 다른 글
중첩 데이터의 메모리 저장방식 [JS문법 종합반 3주차 ] (0) | 2023.04.11 |
---|---|
메모리: 참조형 데이터는 가변하다. [ JS문법 종합반 3주차 -1] (0) | 2023.04.11 |
new Set() 기본개념과 교집합 구하는 메소드 만들기 [JS문법 종합반 2주차 - 3] (0) | 2023.04.10 |
new Map() 완전정리 [JS문법 종합반 2주차 - 3] (0) | 2023.04.10 |
prompt() 메소드 [혼공자 확인문제 2-3-5] (0) | 2023.04.08 |