값의 할당과 재할당

값의 할당

자바스크립트에서 변수에 값을 할당하는 법은 두가지가 있다.

var score; // undefined
socre = 80;

위의 코드는 undefined로 초기화 후 새롭게 할당한 숫자 값 80으로 변경(재할당)된다.

var score = 80;

위의 코드도 동일하게 undefined로 초기화 후 새롭게 할당한 숫자 값 80으로 변경된다.
변수의 선언과 값의 할당을 하나의 문장으로 단축 표현해도 자바스크립트 엔진이 각각 2개의 문장으로 나누어 실행하기 때문이다.

그렇다면 다음 코드의 결과값은 어떨까?

console.log(score); // undefined

score = 80;
var score;

console.log(score); // 80

앞서 말했듯이 변수로 선언된 score는 호이스팅 되어 최상단으로 끌어올려지고 undefined로 초기화 된다. 그 이후 80이라는 값이 할당되어 다음과 같은 결과가 나오는 것이다.

값의 재할당

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

var 키워드로 선언한 변수는 값을 다음과 같이 재할당 할 수 있다. score 변수에는 선언된 직후 undefined로 초기화 된 이후에 숫자 80이라는 값이 할당 되었으므로, 이 또한 재할당이라고 볼 수 있다. 그 이후 90이라는 값으로 다시 한번 재할당 한다.

다음의 사례를 통해 알 수 있듯이 재할당은 변수에 저장된 값을 다른 값으로 변경하는데, 값을 변경할 수 있기에 변수라고 지칭한다.

변수 최초 선언 시 undefined가 할당되고, 그 이후 다른 값이 재할당 될 때마다 변수는 메모리 상의 다른 주소를 참조하게 된다. 그리고 기존의 불필요한 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제되는데(매니지드 언어의 특징), 언제 해제될지는 예측할 수 없다.

프로그래밍 언어는 메모리 관리 방식에 따라 언매니지드 언어와 매니지드 언어로 구분할 수 있는데, C언어와 같은 매니지드 언어는 개발자의 역량에 따라 최적의 성능을 확보할 수 있지만 그 반대의 경우 치명적 오류를 생산할 가능성도 있다.

자바스크립트와 같은 매니지드 언어는 개발자가 명시적으로 메모리를 할당하고 해제할 수 없고 가비지 콜렉터에 의존해야 하지만, 개발자의 역량에 따른 편차를 줄여 일정한 생산성을 확보할 수 있다. 그리고 이는 성능 면에서 어느 정도의 손실을 가져온다.

상수

변수에 저장된 값을 변경할 수 없다면 상수(constant)라고 지칭한다.
한 번만 할당할 수 있는 변수인 것이다.

ES6에서 도입된 const 키워드를 사용해 선언한 변수는 재할당이 금지되는데, 해당 키워드를 사용해 상수를 표현할 수 있다.

좋은 웹페이지 즐겨찾기