Home Javascript 변수
Post
Cancel

Javascript 변수

변수 선언

변수 선언은 값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간을 연결해서 값을 저장할 수 있도록 준비하는 것이다. Javascript에서는 변수를 선언할 때 var, let, const 키워드를 사용한다. let, const는 ES6에서 도입된 키워드이다. ES6 이전에는 var만 사용했지만 var 키워드는 블록 레벨 스코프를 지원하지 않고 함수 레벨 스코프를 지원한다는 단점으로 인해 let, const가 도입되었다.

Javascript에서 변수 선언은 2가지 단계를 거쳐 수행된다.

  • 선언 단계: 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.
  • 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해서 초기화 한다.

var 키워드를 사용해서 변수를 선언할 경우 초기화 값을 지정하지 않으면 undefined을 암묵적으로 할당하게 된다.

변수 호이스팅(Variable hoisting)

1
2
3
4
5
6
    console.log(score); // undefined

    var score;          // 변수 선언
    score = 80;         // 값의 할당

    console.log(score); // 80

Javascript는 한 줄씩 실행되는 인터프리터 언어이다. 그래서 위 코드를 실행하면 오류가 발생할 것으로 예상했지만 console에서 “undefined”으로 log가 찍히는 것을 확인할 수 있다. 그 이유는 변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점인 런타임에서 실행되는 것이 아니라 그 이전 단계에서 먼저 실행되기 때문이다. Javascript는 소스코드를 한 줄씩 순차적으로 실행하기 전에 소스코드의 평가 과정에서 소스코드를 실행하기 위한 준비를 한다. 이때 Javascript 엔진은 변수 선언을 포함한 모든 선언문을 소스코드에서 찾아내 먼저 실행한다. 따라서 변수 선언이 어디에 있든 변수를 참조할 수 있다. 이처럼 변수 선언문이 코드의 실행보다 앞서 제일 먼저 실행되는 특징을 변수 호이스팅이라 한다. 값의 할당은 런타임에서 실행이되어 위 코드의 첫 번째 console.log에서는 undefined이 출력된다.

가비지 콜렉터(Garbage collector)

Javascript는 변수를 선언하면 메모리에 변수를 저장할 공간을 확보하고 undefined으로 초기화 한다. 선언된 변수에 값을 할당하면 변수를 선언할 때 잡아놓은 메모리에 값을 넣는 것이 아니라 새로운 메모리에 값을 넣고 변수와 연결한다. 그럼 선언할 때 연결한 메모리는 어떻게 처리할까? 아무도 사용하고 있지 않으니 필요없는 메모리이다. 이런 불필요한 값들은 가비지 콜렉터에 의해 메모리에서 자동으로 해제된다. 단, 언제 해제될지는 알 수 없다.

가비지 콜렉터는 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용하지 않는 메모리를 해제하는 기능을 말한다. Javascript는 가비지 콜렉터를 통해 메모리 누수를 방지한다.

This post is licensed under CC BY 4.0 by the author.