변수란 무엇인가? 왜 필요한가?
컴퓨터는 CPU를 사용해 연산하고, 메모리를 사용해 데이터를 기억한다.
메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체다.
10+20
이와같은 코드를 실행 하면
숫자 값 10과 20, 결과 값인 30은 메모리상의 임의의 위치(메모리 주소)에 2진수로 기억(저장)되고 CPU는 이 값을 읽어들여 연산을 수행한다.
이때 연산 결과를 재사용 하기 위해 메모리 주소를 통해 값에 직접 접근하는 시도는 올바른 방법이 아니다.
코드가 실행될 때마다 값이 저장될 메모리 주소가 변경되기 때문이다.
이 때문에 프로그래밍 언어는 변수라는 매커니즘을 제공한다.
변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름이다.
값을 저장하고 참조하며, 값의 위치를 가리키는 상징적인 이름이다.
var result = 10 + 20;
변수 이름 : 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름. result
변수 값: 변수에 저장된 값. 30
할당(대입, 저장): 변수에 값을 저장하는 것
식별자
변수 이름을 식별자라고도 한다.
식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.
식별자는 값이 아니라 메모리 주소를 기억하고 있다.
변수, 함수, 클래스등의 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자라고 부른다.
변수 선언
변수 선언이란 값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 것이다.
자바스크립트에서 변수를 선언할 때는 var, let, const 키워드를 사용한다.
var
var score; //변수 선언문
변수 선언 2단계
1. 선언 단계 - 변수 선언을 통해 변수 이름 score을 등록한다.
2. 초기화 단계 - 값을 할당하지 않았지만 score변수에 undefined라는 값이 암묵적으로 할당되어 초기화한다.
선언이 안된 변수와 같은 식별자에 접근하면 ReferenceError(참조 에러)가 발생한다.
변수 호이스팅
변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 특징을 변수 호이스팅이라 한다.
변수 선언은 소스코드가 순차적으로 실행되는 런타임 이전 단계에서 먼저 실행된다.
변수 선언이 어디에 있든 상관없이 다른 코드보다 먼저 실행한다.
값의 할당
var score; //변수 선언
score = 80; //값의 할당
값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다.
console.log(score); //undefined
var score = 80; // 변수 선언과 값의 할당
console.log(score); // 80
변수에 값을 할당할 때는 이전 값 undefined가 저장되어 있던 메모리 공간을 지우고 그 공간에 할당 값 80을 새롭게 저장하는 것이 아니라,
새로운 메모리 공간을 확보하고 그곳에 할당값을 저장한다.
값의 재할당
var 키워드로 선언한 변수는 값을 재할당 할 수 있다.
값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 상수(constant)라 한다.
상수는 단 한번만 할당할 수 있는 변수다. const 키워드를 사용한다.
var score = 80; // 변수 선언과 값의 할당
score = 90; // 값의 재할당
이전 값 80이 저장되었던 메모리 공간이 아닌 새로운 메모리 공간을 확보하고 그 메모리 공간에 숫자 값 90을 저장한다.
score변수의 이전 값인 undefined와 80은 어떤 식별자와도 연결되어있지 않는 불필요한 값이다.
이러한 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제 된다.
'FRONT > JAVASCRIPT' 카테고리의 다른 글
[javascript] 데이터 타입 (0) | 2021.06.16 |
---|---|
[javascript] 표현식과 문 (0) | 2021.06.16 |
[javascript] 자바스크립트란? (0) | 2021.06.14 |
01.프로그래밍이란? (0) | 2021.06.14 |
[노마드코더] 바닐라 JS로 크롬앱 만들기 마지막(quotes, weather) (0) | 2021.06.10 |