[Js] 모던 자바스크립트 Deep Dive - 변수(4장)
변수란 무엇일까?
프로그래밍을 하면서 가장 많이 접한 단어가 변수, 함수 단어가 아닐까 싶다. 나는 이번에 변수 챕터를 읽으면서 변수에 대해 몰랐던 것도 알게 되었다. 많이 접한 단어인데 정확한 개념을 모르고 있었단는 것을 알고 기초부터 차근차근 쌓아나가자는 생각을 많이하게 되었다.
그렇다면 본론으로 돌아가서 변수란 정확한 어떤 뜻일까? 변수란 하나의 값을 저장하기 위해 확보한 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름이라고 나와있다. 한마디로 변수를 사용해서 메모리 공간을 확보하고 해당 메모리 주소를 가리키는 식별자라고 생각하면 좋을꺼 같다.
변수 선언과 호이스팅
변수를 사용하기 위해서는 반드시 선언이 필요하다. 변수를 선언하기 위해서는 var, const, let과 같은 키워드를 사용해서 선언한다. var, const, let키워드는 모두 차이점이 존재하는데 해당 키워드를 소개하는 챕터가 따로 존재해서 그 부분을 읽게 되면 다시 블로그에 정리해서 올리려고 한다.
먼저 변수를 아래 코드와 같이 선언과 동시에 할당을 하거나 선언과 동시에 할당을 하거나 두 가지 방법이 존재한다.
var sum; // 변수 선언
sum = 50; // 변수 할당
var score = 50; // 변수 선언과 동시에 할당
인터프리터에 의해 소스 코드를 한 줄씩 실행이 되는데 선언부는 Javascript 메커니즘에 의해서 코드의 상단으로 끌어올려지는 호이스팅이 발생한다. 변수인 var, let, const뿐만 아니라 function, class과 같은 키워드도 코드 상단으로 끌어올려진다.
변수가 상단으로 끌어올려지면 값이 할당이 안되어 있기 때문에 undefined가 할당되어 있을 것이다. 아래와 같이 콘솔을 찍게 되면 undefined가 출력된다.
console.log(score)
var score = 10;
변수는 선언과 동시에 메모리공간을 차지하게 되고 초기에는 undefined값이 할당되어 있을 것이다. 그 후 인터프리터에 의해 소스 코드를 한 줄씩 실행이 되며 할당이 되는데 그때 기존에 undefined가 할당되어 있던 메모리 공간을 지우고 메모리 공간에 할당하는게 아니라 새로운 메모리 공간을 확보하고 그곳에 새롭게 할당하게 된다. 이 부분은 나도 잘 몰랐던 부분이었다.
그럼 undefined가 있던 메모리 공간은 어떻게 되나싶은 생각이 있을텐데 undefined 메모리 공간은 가비지 콜렉터에 의해 정리되어지게 된다. 가비지 콜렉터란 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리 공간을 해제하는 기능을 의미한다.