변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙힌 이름을 말한다.
다시 말하자면 변수는 프로그래밍 언어에서 값을 저장하고 참조하는 메커니즘으로, 값의 위치를 가르키는 상징적인 이름이다.
코드는 컴퓨터에게 내리는 명령이지만 개발자를 위한 문서 이기도하다. 개발자의 의도를 나타내는 명확한 네이밍은 코드를 이해하기 쉽게 만들며, 이는 협업과 품질 향상에 도움을 준다.
변수 이름을 식별자 라고도 한다. 식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말합니다. 식별자는 값이 아니라 메모리 주소를 기억하고 있습니다. 즉 식별자는 메모리 주소에 붙은 이름이라고 할 수 있습니다.
변수를 생성하는 것을 의미하며 좀 더 자세히 얘기하면 값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 것이다.
변수를 사용하기 위해서는 반드시 선언이 필요합니다. 변수를 선언할 때는 let, cont, var 키워드를 사용합니다.
var로 변수를 선언하면 변수를 선언하기 전에 변수를 사용할 수 있는데 이는 변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 그 이전 단계에서 먼저 실행되기 때문이다.
이는 함수 혹은 전역 상태에서 실행 컨텍스트가 생성 될 때 코드가 실행 되기전 EnvironmentRecord에 미리 선언 되어지기때문에 생기는 현상입니다. 이처럼 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라고 합니다.
let과 const를 이용해 만든 변수 또한 호이스팅 되지만 이 두 변수는 선언되고 할당 되기 전까지는 Temporal Dead Zone에 속하기 때문에 접근할 수가 없습니다. 함수는 function을 이용한 선언식은 선언 위에서 사용가능하지만 표현식은 사용 불가합니다.
변수에 값을 할당 할 때는 할당 연산자 =를 사용합니다. 변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행됩니다.
console.log(score)
score = 80
var score;
console.log(score)
이때까지 배운 것을 바탕으로 어떤 식으로 결과가 나올지 예상해보자. 직접 해보는 것을 추천한다.컴퓨터는 답을 알고 있다.
재할당은 말 그대로 값을 변경하는 것이다. let과 var키워드로 만든 변수는 재할당이 가능하지만 const는 재할당이 불가능 합니다.
그리고 재할당되어 버려진 값을 저장하는 메모리 공간은 가비지 콜렉터에 의해 메모리 해제 됩니다.
가비지 콜렉터
애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능을 말합니다. 더 이상 사용되지 않는 메모리란 간단히 말하자면 어떤 식별자도 참조하지 않는 메모리 공간을 의미합니다. 이로 인해 메모리 누수를 방지할 수 있습니다.