자바스크립트에서 변수에 값을 재할당하면 어떻게 될까?
자바스크립트를 공부하다가 변수에 값을 재할당 할 때 내부적으로 발생하는 과정이 자바와 다르다. 당연한 얘기이다 왜냐하면 자바스크립트는 약타입 언어로 동적으로 타입이 결정되고 자바는 강타입 언어로 런타임 시점 이전에 타입이 결정된다(컴파일러의 기능 중 하나는 타입 체크가 있음)
일단 알고가야 하는 사실이 있다. 자바스크립트는 동적 타입 언어이다. 이는 변수를 선언할 때 변수가 가르키는 메모리가 할당 되는 것이 아니라 변수에 값이 할당됐을 때 메모리가 확보된다. (선언은 정보만 제공, 정의하는 시점에 메모리 확보)
왜 선언 시점에 메모리를 할당하지 않는 것일까? 그 이유는 바로 동적 타입 언어이기 때문이다. 변수를 선언한 이후에 변수에는 여러가지 타입의 값을 할당할 수 있다. 이는 변수가 가르키는 값의 타입이 변경될 수 있음을 의미하고 메모리 구조나 크기가 변경된다는 것을 의미한다.
그럼 본론으로 돌아와서, 내가 궁금한 “자바스크립트에서 변수에 값을 재할당하면 어떻게 될까?”을 살펴보자
var score; // 선언함, 변수에 undefined 저장
score = 80; // 재할당, 새로운 메모리 확보 및 값 저장
score = 90; // 재할당, 새로운 메모리 확보 및 값 저장
결론적으로, 자바스크립트의 경우 변수에 값을 재할당할 경우 새로운 메모리가 생성되고 그곳에 값이 저장된다. 또한 변수가 가르키는 메모리 주소는 새로 생성된 메모리 주소를 가르킨다. 마지막으로 더 이상 참조되지 않는 메모리는 가비지 컬렉터에 의해 제거된다.
- 참고
모던 자바스크립트, Deep Dive (이웅모)
https://product.kyobobook.co.kr/detail/S000001766445
모던 자바스크립트 Deep Dive | 이웅모 - 교보문고
모던 자바스크립트 Deep Dive | 269개의 그림과 원리를 파헤치는 설명으로 ‘자바스크립트의 기본 개념과 동작 원리’를 이해하자!웹페이지의 단순한 보조 기능을 처리하기 위한 제한적인 용도로
product.kyobobook.co.kr