1. 변수란?
변수의 필요성
- 메모리 : 데이터를 저장할 수 있는 메모리 셀의 집합체
- 셀 하나에 1바이트(8비트)
- 각 셀은 고유의 메모리 주소를 가지며, 이 주소는 메모리 공간의 위치를 나타낸다.
- 컴퓨터는 셀 크기 단위로 데이터 저장하거나 읽어 들인다.
- 메모리 주소를 통해 직접 값에 접근하려고 하면 아래와 같은 문제점이 있다.
- 실수로 OS가 사용하고 있는 값을 바꾸면 치명적인 오류 발생 가능
- 값이 저장될 메모리 주소는 코드 실행 시 메모리의 상황에 따라 임의로 결정되므로 주소는 매번 바뀌고, 따라서 코드를 실행하기 전까지 주소를 알 수 없다.
➡️ 따라서 JS는 개발자의 직접적인 메모리 제어를 허용하지 않는다.
대신 저장된 값을 읽어 재사용하기 위해 변수라는 메커니즘을 제공한다.
변수
하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름
쉽게 말하면 값의 위치를 가리키는 상징적인 이름!
var result = 10 + 20;
- 변수명(변수 이름) -
result
- 변수 값 : 변수에 저장된 값
30
- 할당(대입, 저장) : 변수에 값을 저장하는 것
- 참조 : 변수에 저장된 값을 읽어 들이는 것
식별자
- 어떤 값을 구별해서 식별 가능한 고유한 이름
- 식별자는 값이 아닌 메모리 주소를 기억하고 있다.
- 클래스, 함수, 변수 등 이름은 모두 식별자!
- 네이밍 규칙을 준수해야 하며 선언을 통해 JS 엔진에 식별자 존재를 알린다.
2. 변수 선언
- 변수를 생성하는 것을 의미
- 1) 값을 저장하기 위한 메모리 공간을 확보하고,
2) 변수 이름과 확보된 공간 주소를 연결해서 값 저장을 준비하는 것
- 변수 선언 키워드 : var,let,const
JS의 변수 선언 단계
- 선언 단계: 변수 이름을 등록해 JS 엔진에 변수 존재 알림
- 초기화 단계: 값 저장 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화 (JS의 특징)
키워드
- JS 엔진이 수행할 동작을 규정한 일종의 명령어
var 키워드 변수 선언
- 선언 단계와 초기화 단계가 동시 진행된다.(
undefined)
var 키워드로 선언된 변수는 어떤 값도 할당하지 않아도 undefined 값을 가진다.
- 따라서 쓰레기 값이 들어있을 위험이 적다.
쓰레기 값
3. 변수 선언 시점과 변수 호이스팅
- 변수 선언 시점 : 런타임이 아니라 그 이전 단계에서 먼저 실행
- 변수 선언 뿐 아니라 모든 선언문(변수 선언문, 함수 선언문 등)을 먼저 실행
➡️ 이렇게 변수 선언문이 코드 맨 위에 적혀 있는 것처럼 동작하는 JS 고유의 특징을 변수 호이스팅이라고 한다.
런타임
4. 값의 할당
- 런타임 이전에 실행되는 변수 선언과는 다르게 값의 할당은 런타임에 실행된다.
var score = 80;
-
위의 코드처럼 변수 선언과 값의 할당을 하나로 단축 표현해도 선언과 할당은 각각 나누어 실행된다. 따라서 여전히 변수에 undefined로 초기화되는 것은 동일하다.
-
유의할 점은 값 할당 시 undefined가 있던 메모리 공간을 지우고 할당하는 게 아니라 새 공간을 확보해서 거기에 값을 저장한다.
-
재할당 : 값이 할당되어 있는 변수에 새 값을 다시 할당하는 것
-
상수 : 값을 재할당할 수 없어 변수에 저장된 값을 변경할 수 없는 경우. 한 번 정해지면 변하지 않는, 한 번만 할당 가능한 변수다.