기억하고 싶은 값을 메모리에 저장하고, 저장된값을 읽어 들여 재사용
하기 위해 사용됩니다.
하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름
이며
값의 위치를 가르키는 상징적인 이름
입니다.
let userId = 1; // userId : 변수 이름, 1 : 변수 값
let userName = '성석민'; // userName : 변수 이름, 성석민 : 변수 값
console.log(userId); // 1
변수 이름은 값이 저장된 메모리 공간에 붙인 상징적인 이름으로 변수 이름과 매핑된 메모리 주소를 통해 메모리 공간에 접근해서 저장된 값을 반환합니다.
✅ 변수에 저장된 값의 의미를 파악할 수 있는 변수 이름은 가독성을 높이는 부수적인 효과를 줍니다.
변수 이름을 식별자
라고도 하며 어떤 값을 구별해서 식별할 수 있는 고유한 이름
을 의미한다. 식별자
는 값이 저장되어 있는 메모리 주소를 기억해야 합니다.
위의 userId와 userName은 식별자이며 값이 1
과 성석민
이 저장되어 있는 메모리 주소 0x04223C3
와 0x011332F1
를 기억합니다.
✅ 식별자는 값이 아니라 메모리 주소를 기억합니다.
값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 단계
입니다.
자바스크립트에서는 var
, let
, const
키워드를 사용하여 변수를 선언합니다.
ES6 이전
에 변수를 선언할 수 있는 방법은 var
키워드가 유일했지만 ES6 이후
에 var
키워드의 문제점을 보완하기 위해 let
과 const
키워드가 도입되었습니다.
undefined
로 초기화됩니다.// 방법 1
var userName; // 선언 단계 + 초기화 단계
userName = '성석민'; // 할당 단계
// 방법 2
var userName = '성석민'; // 선안 단계 + 초기화 단계 + 할당 단계
✅ 변수를 사용하려면 반드시 변수 선언이 필요합니다. 만약, 변수를 선언하지 않고 식별자에 접근하면 아래와 같이 ReferenceError(참조 에러)
가 발생합니다.
console.log(userNickname); // ReferenceError
자바스크립트는 컴파일 언어가 아닌 인터프리터 언어 입니다.
console.log(identifier) // undefined
var identifier;
코드를 한 줄씩 순차적으로 실행하기 때문에 console.log(identifier)
는 ReferenceError(참조 에러)
가 출력되어야 하는게 맞다고 생각했겠지만 undefined
가 출력됩니다.
그 이유는 변수 선언이 코드가 한 줄씩 순차적으로 실행
되는 시점 (런타임)이 아니라 이전 단계에서 먼저 실행되기 때문입니다. 즉, 자바스크립트 엔진은 변수 선언이 코드의 어디에 있든 상관없이 다른 코드보다 먼저 실행합니다.
이처럼 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트의 고유의 특징을 호이스팅
이라고 합니다.
✅ 변수 선언
은 코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당
은 코드가 순차적으로 실행되는 시점인 런타임에 실행됩니다.
이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것이 재할당입니다.
var score; // 변수 선언
score = 80; // 값 할당
score = 90; // 값 재할당
위의 코드를 실행하면 아래의 이미지와 같이 메모리의 값이 변합니다.
Q :
undefined
와80
은 더이상 쓰이지 않는데 메모리를 낭비하는 거 아닐까요 ??
A : 자바스크립트의 가비지 콜렉터에 의해 자동으로 지워집니다.
✅ 3가지 키워드 중 var
, let
은 재할당이 가능하지만 const
는 재할당이 불가능합니다.
// var
var aEmail = 'abcdefg@naver.com';
aEmail = 'hijklmn@naver.com'; // 값을 재할당 할 수 있다.
// let
let bEmail = 'abcdefg@gmail.com';
bEmail = 'hijklmn@gmail.com'; // 값을 재할당 할 수 있다.
// const
const cEmail = 'abcdefg@daum.net';
cEmail = 'hijklmn.daum.net'; // 오류 발생
식별자의 이름을 정하는데에도 규칙이 있습니다.
🟢
var firstName;
var $firstName;
var first_name;
❌
var 1st;
var this;
var class;
자바스크립트는 카멜 케이스(camelCase)를 사용합니다.
3가지 유형의 네이밍 컨번센이 자주 사용됩니다.
// camelCase
var firstName;
// snake_case
var first_name;
// PascalCase
var FirstName;
틀린 부분이 있거나 보충해야 할 내용이 있다면 댓글이나 DM(sungstonemin)으로 알려주시면 감사하겠습니다😄
글을 너무 잘쓰시네요 감사합니다