하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.
프로그래밍 언어에서 값을 저장하고 참조하는 메커니즘으로, 값의 위치를 가리키는 상징적인 이름이다.
변수 이름(변수명): 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름
변수 값: 변수에 저장된 값
할당 : 변수에 값을 저장하는 것
참조: 변수의 저장된 값을 읽어 들이는 것
메모리는 여러 개의 메모리 셀을 가지며 각 셀은 메모리 주소를 가지고 있다.
메모리 주소를 통해 직접 값에 접근 하는 것은 치명적인 오류를 야기할 수 도 있음.
기억 하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어 들여 재사용하기 위해 변수라는 메커니즘을 사용한다.
어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.(값이 아니라 메모리 주소를 기억하고 있음)
값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간을 연결해서 값을 저장할 수 있게 준비하는 것
실행 컨텍스트
에 등록된다.변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트의 고유의 특징
자바스크립트는 인터프리터 언어이기 때문에 한 줄 씩 순차적으로 진행된다.
변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다.
변수 선언
: 런타임 이전 실행값의 할당
: 런타임에 실행console.log(score); // undefined
var score; // 1) 변수 선언
score = 80; // 2) 변수 할당
console.log(score); // 80
변수 선언시 undefined
가 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값을 새로 저장하는 것이 아니다. (새로운 메모리 공간을 확보하고 그곳에 할당 값을 저장한다.)
변수 할당시 변수값이 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값을 새로 저장하는 것이 아니다. (새로운 메모리 공간을 확보하고 그곳에 할당 값을 저장한다.)
그렇다면
변수 선언
과변수 할당
시에 사용했던 메모리 공간은 어디로 갔을까?정답은 바로
가비지 콜렉터
에 의해 메모리에서 자동으로 해제된다.
가비지 콜렉터는 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능을 말한다. 더 이상 사용되지 않는 메모리란 간단히 말하자면 어떤 식별자도 참조하고 있지 않는 메모리 공간을 의미한다. 자바스크립트는 가비지 콜렉터를 내장하고 있는 매니지드 언어로서 가비지 콜렉터를 통해 메모리 누수를 방지한다.
메모리 관리 방식에 따른 분류
언매니지드 언어 매니지드 언어 C 언어 자바스크립트 메모리 관리가 개발자의 영역 개발자의 직접적인 메모리 제어 X 개발자의 역량에 따라 최적의 성능을 확보 가능하지만 그 반대의 경우 치명적인 오류를 생산할 수 도 있다. 개발자의 역량이 작용하는 부분이 상대적으로 작아져 일정한 생산성 확보 가능. 대신 성능면 에서의 손실을 감수해야 된다.