본문 바로가기

JavaScript

[JavaScript] 변수란 무엇일까?

1. 메모리

 

컴퓨터는 똑똑해 보이지만 한편으로는 바보같기 때문에 사람이 쉽게 인식하는 표현을 컴퓨터는 바로 이해할 수 없다.

 

 

10 + 20

 

사람은 이 표현식을 10에 20을 더하니깐 결과는 30이겠구나라고 생각할 수 있지만, 컴퓨터는 저 표현식에 대한 해석이 필요하다. 10과 20이 무엇인지도 알아야 하고 +기호가 무엇을 의미하는 지도 나타내어야 한다.

 

그래서 컴퓨터는 CPU를 사용하여 이를 연산하고 메모리를 활용하여 이를 기억한다.

 

https://velog.io/@kim-jaemin420/Variable%EB%B3%80%EC%88%98

 

 

컴퓨터는 모든 데이터를 2진수로 저장하기 때문에 메모리에 저장되는 모든 데이터는 2진수로 저장된다.

 

 

하지만 이 연산된 결과값을 가져오기 위해서는 주소값이 필요한데 코드가 실행될 때마다 주소값이 변경된다. 따라서 주소에 직접 접근하는 방법은 옳은 방법이 아니다. 따라서 프로그래밍 언어는 이를 기억하기 위한 메커니즘으로 변수를 제공한다.

 

 

즉 변수는 값을 저장하기 위해 확보한 메모리 공간 자체라고도 할 수 있고 그 공간을 식별하기 위한 이름이라고도 할 수 있다.

 

 

 

2. 변수

 

var result = 10 + 20;

 

위의 설명과 같이 변수는 저장된 값을 식별할 수 있는 이름이다. 위의 코드와 같이 result를 변수 이름이라고 한다. 변수의 값을 저장하는 행위를 assignment(할당)이라고 하고 그 값을 읽어오는 것을 reference(참조)라고 한다.

 

여기서 변수 이름을 Identifier(식별자)라고도 한다. 단 주의할 점은 식별자는 값이 아닌 메모리의 주소를 기억하고 있다.

 

 

 

 

3. 변수 선언

 

변수를 사용하기 위해선 반드신 선언이 필요하다. 선언은 선언 단계와 초기화 단계 그리고 값의 할당으로 이루어져 있다. JS에서 변수를 선언할 때에는 var, const, let 키워드를 사용한다.

 

 

var study;

위 변수 선언문은 study라는 이름을 가진 변수를 선언한 것이다. 메모리에 변수 이름을 등록하고 저장할 메모리 공간을 확보한다. 이 때 undefined로 할당되어 값이 초기화된다.

 

JS에서 변수 선언은 선언 단계와 초기화 단계가 동시에 발생한다. 선언 단계는 변수의 이름을 등록하는 것이고 초기화 단계는 값을 저장하고 공간을 확보하기 위해서 undefined라는 값을 암묵적으로 할당하는 것이다.

 

값의 할당은 

 

var study;
study = 'Cheers!';

 

혹은

 

var study = 'Cheers!';

의 방법으로 대입한다. 

 

 

 

4. 변수 호이스팅

 

console.log(study);

var study;

 

다음에 결과는 무엇일까??? (undefined)

 

JS는 인터프리터로 한 줄씩 실행된다. 근데 study라는 변수는 console.log를 실행하는 시점에서 선언되어 있지 않다. 원래 같으면 참조 에러가 발생해야 하지만..

 

그 이유는 변수 호이스팅에 있다. JS에서 변수 선언은 런타임 시점이 아니라 런타임 이전에 먼저 실행되기 때문에 이러한 현상이 발생한다.

 

먼저 실행되어 변수 선언문이 코드의 맨 앞으로 이동한 것처럼 동작하는 것을 호이스팅이라고 한다.

 

참고로 모든 식별자는 호이스팅이 된다.

 

 

 

 

- 참고자료

 

모던 자바스크립트 튜토리얼 

 

모던 JavaScript 튜토리얼

 

ko.javascript.info

PoiemaWeb 블로그

 

웹 프로그래밍 튜토리얼 | PoiemaWeb

Front-end Development Tutorial

poiemaweb.com

모던 자바스크립트 Deep Dive