일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- react-router-dom
- jest.config.mjs
- sequelize
- JEST
- typescript
- Glob Pattern
- mysql
- nunjucks
- nodejs
- ExpressJS
- Switch 사용불가
- Passport
- Board
- Today
- Total
게으른 나르의 코딩
[JavaScript] 변수 본문
애플리케이션은 데이터를 다룬다. 변수는 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념이다.
변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.
메모리에 저장된 값을 식별할 수 있는 고유한 이름을 변수 이름이라 한다. 변수에 저장된 값을 변수 값이라고 한다.
변수에 값을 저장하는 것 행위를 할당(대입,저장)이라 하고, 저장된 값을 읽어 들이는 것을 참조라 한다.
식별자
변수 이름을 식별자라고도 부른다. 식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.
식별자는 값이 저장되어 있는 메모리 주소와 매핑 관계를 맺으며 이 매핑 정보도 메모리에 저장되어야 한다.
이처럼 식별자는 값이 아니라 메모리 주소를 기억하고 있다.
선언
변수 선언이란 변수를 생성하는 것을 말한다.
값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 것이다.
변수를 사용하려면 반드시 선언이 필요하다. 변수를 선언할 때는 var. let, const 키워드를 사용한다.
자바스크립트 엔진은 변수 선언을 2단계에 거쳐 수행한다.
선언 단계 : 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.
초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화 한다.
선언의 실행 시점
자바스크립트 엔진은 소스코드를 한 줄씩 순차적으로 실행하기에 앞서 먼저 소스코드의 평가 과정을 거치면서 소스코드를 실행하기 위한 준비를 한다. 실행 준비 단계인 소스코드의 평가 과정에서 엔진은 모든 선언문을 소스코드에서 찾아 먼저 실행한다. 그리고 평가 과정이 끝나면 비로소 모든 선언문을 제외하고 소스코드를 한 줄씩 순차적으로 실행한다.
변수 호이스팅
변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라고 한다.
console.log(x); //undefined
var x = 2;
참조 에러가 발생할 거 같지만 선언 실행시점을 보면 준비 단계에서 선언문을 먼저 실행 하기 때문에 에러가 나지 않는다.
할당
변수에 값을 할당(대입, 저장)할 때는 할당 연산자 = 를 사용한다.
var x; // 변수 선언
x = 1; // 값의 할당
var y = 2; // 변수 선언과 값의 할당
할당을 할 때에는 3번째 줄처럼 선언과 같이 단축 표현을 할 수 있다. 그렇다고 해서 같이 실행 되는 것이 아닌 선언과 할당은 각각 나누어 실행된다.
준비 단계(변수 선언 undefined초기화) -> 런타임 -> 값의 할당
이렇게 따로 진행된다.
메모리 공간으로 봤을 때는 먼저 준비 단계에서 값을 저장하기 위해 메모리 공간을 확보하고 값을 undefined를 할당한다. 그런 다음 런타임 이후 새로운 값의 할당을 위해 새로운 메모리 공간을 확보하고 할당된 값을 저장하는 방식이다.
그러면 같은 변수에 2개의 값이 할당된 거처럼 보이지만 undefined는 새로운 값을 할당 받기 때문에 가비지 콜렉터로 인식돼서 메모리에서 해제가 된다.
재할당
재할당은 현재 변수에 저장된 값을 버리고 새로운 값을 저장하는 것이다.
var x = 2; // 변수 선언과 값의 할당
x = 3; // 값의 재할당
재할당도 마찬가지로 메모리 공간으로 봤을 때 새로운 메모리 공간을 확보하고 재할당된 값을 저장한다.
그러면 같은 변수에 저장되었던 메모리들은 가비지 콜렉터로 인해서 메모리에서 해제가 된다.
'Languages > JavaScript' 카테고리의 다른 글
[JavaScript] 연산자 (2) (0) | 2022.05.25 |
---|---|
[JavaScript] 연산자 (1) (0) | 2022.05.25 |
[JavaScript] 데이터 타입 (0) | 2022.05.25 |
[JavaScript] 표현식과 문 (0) | 2022.05.25 |
[JavaScript] 자바스크립트 (0) | 2022.05.23 |