본문 바로가기

자바스크립트 리뷰

메모리: 변수와 상수 그리고 불변하다와 불변하지 않다. [ JS문법 종합반 3주차]

자바스크립트의 메모리 관리 방식에 있어서 [변수]와 [상수]의 차이점은 뭘까? 불변하다와 불변하지 않다의 차이점은 뭘까?

 

일단 큰 그림은 스파르타 코딩클럽 [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라는 데이터는 가비지가 된 것이다.   

 

반대로 불변하지 않으려면 어떻게 되어야 할까? 이건 질문으로 남겨두기로 한다.