자바스크립트 엔진의 변수 선언과 메모리 관리

Kimrotti,javascriptvariablegarbage collector

자바스크립트를 사용하며 기본적인 변수 선언, 메모리 관리, 실행컨텍스트가 변수를 관리하는 방법과 가비지 컬렉터의 역할에 대해 알아보겠습니다.

자바스크립트에서 변수를 선언하는 방법은 var, let, const가 있다. 자바스크립트의 개발자의 직접적인 메모리 제어를 허용하지 않으므로 우리가 변수를 선언할 때, 내부적으로 어떻게 동작하는지 이해하고 활용할 필요가 있다.

변수선언이란?

값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 것을 지칭한다.

console.log(a); // undefined
var a = 10;

위 예제에서 console.log의 결과값은 undefined이다. 왜 일까? 이유는 변수 선언 시점이 런타입이 아니라 그 이전 단계에 실행되기 때문이다.

우리는 이처럼 변수 선언문이 코드의 선두로 끌어 올려져 동작하는 자바스크립트의 고유한 특징을 호이스팅이라고 부른다.

let a = 10;
a =30;

위와 같이 변수를 선언하고 값을 할당하면, 변수 a는 메모리 공간을 차지하게 된다. 이때, 변수 a가 차지하던 메모리 공간을 더 이상 사용하지 않게 되면, 가비지 콜렉터가 이를 감지하고 메모리 공간을 해제한다.