변수의 정의
컴퓨터는 CPU를 사용하여 연산하고 메모리를 사용해 데이터를 기억한다.
메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체이며 셀 하나의 크기는 1byte(8bit)이고 각 셀은 고유의 메모리 주소를 갖는다.
연산한 값을 재사용하고 싶다면 메모리 주소를 통해 직접 접근해야하지만 이는 치명적 오류를 발생시킬 수 있으므로 자바스크립트는 개발자의 직접적인 메모리 제어를 허용하지 않는다.
이를 위해서 값을 재사용하기 위한 메커니즘으로 변수가 제공된다.
한마디로 값의 위치를 가리키는 상징적인 이름이다.
변수에 값을 저장하는 것을 할당이라고 하고 읽어 들이는 것을 참조(reference)라고 한다.
변수 선언이란 변수를 생성하는 것을 말한다.
값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 연결해서 값을 저장할 준비를 한다.
선언에 의해 확보된 메모리 공간은 해제되기 전까지는 보호된다.
참고로 자바스크립트는 변수를 선언한 이후 값을 따로 할당하지 않아도 undefined를 할당하는 초기화 과정을 거친다.
변수 호이스팅
자바스크립트 엔진은 소스코드를 한줄씩 실행하기 앞서 평과 과정을 거친다.
이때 엔진은 모든 선언문을 찾아내서 먼저 실행 한 후 모든 선언문을 제외한 소스코드를 실행한다.
이를 변수 호이스팅이라고 한다.
이는 변수 선언뿐만 아닌 function, class 등 모든 선언문에서 적용된다.
참고로 변수의 선언만 호이스팅 될 뿐 변수의 할당이 호이스팅 되는 것은 아니다.
그리고 변수가 할당 될 때는 undefined가 저장된 메모리가 아닌 새로운 메모리 공간을 확보 한 후 값을 저장한다.
가비지 콜렉터
변수에 값을 재할당 할 경우 undefined와 이전 값은 어떠한 식별자와도 연결되있지 않으므로 더이상 필요하지 않다는 것을 의미한다.
이러한 불필요한 값들은 가비지 콜렉터를 통해 메모리에서 자동해제 된다.
가비지 콜렌터는 애플리케이션이 할당한 메모리 공간을 주기적으로 사용하지 않는 메모리를 해제하여 메모리 누수를 방지한다
'모던 자바스크립트' 카테고리의 다른 글
Ch.13 스코프 (0) | 2022.10.10 |
---|---|
Ch.12 함수 (0) | 2022.10.08 |
Ch.10 객체 리터럴 (0) | 2022.10.07 |
Ch.7 연산자 (0) | 2022.10.07 |
Ch.5 표현식과 문 (0) | 2022.10.06 |