4.1 변수(Variables)
프로그래밍 언어는 기억하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어 들여 재사용학 위해 변수라는 메커니즘을 제공한다.
변수(Variable) 는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.
4.2 식별자(Identifier)
식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.
식별자는 값이 아니라 메모리 주소를 기억하고 있다.
식별자라는 이름은 변수 이름에만 국한해서 사용하지 않는다. 예를 들어, 변수, 함수, 클래스 등의 이름은 모두 식별자다.
4.3 변수 선언(Variables Declaration)
변수 선언이란 변수를 생성하는 것을 말한다.
좀 더 자세히 말하면 값을 저장하기 위한 메모리 공간을 확보(allocate)하고 변수 이름과 확보된 메모리 공간의 주소를 연결(name binding)해서 값을 저장할 수 있게 준비하는 것이다.
변수 선언에 의해 확보된 메모리 공간은 확보가 해제(release)되기 전까지는 누구도 확보된 메모리 공간을 사용할 수 없도록 보호되므로 안전하게 사용할 수 있다.
var, let, const
var 키워드를 사용한 변수 선언은 선언 단계와 초기화 단계* 가 동시에 진행된다.
선언 단계: 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.
초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화한다.
이 때 undefined 는 원시타입의 값(primitive value 인 것.
만약 초기화 단계를 거치지 않으면 확보된 메모리 공간에는 이전에 다른 어플리케이션이 사용했던 값이 남아 있을 수 있다. 이러한 값을 쓰레기 값(garbage value) 라고 한다.
변수를 사용하려면 반드시 선언이 필요하다. 선언하지 않은 식별자에 접근하면 ReferenceError(참조 에러) 가 발생한다. 식별자를 통해 값을 참조하려 했지만 자바스크립트 엔진에 등록된 식별자를 찾을 수 없을 때 발생하는 에러다.
4.4 변수 호이스팅(Variable hoisting)
console.log(score); // undefined
var score; //변수 선언문
위와 같은 코드에서 참조 에러(ReferenceError)가 발생할 것처럼 보이나 undefined 가 출력되는 이유는 변수 선언이 런타임이 아니라 그 이전 단계에서 먼저 실행되기 때문이다.
변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅(variable hoisting) 이라고 한다.
4.5 값의 할당(assignment)
var score; // 변수 선언
score = 80; // 값의 할당
연산자 = 를 사용하여 할당한다.
변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다.
이전 값 undefined가 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값 80을 새롭게 저장하는 것이 아니라, 새로운 메모리 공간을 확보하고 그곳에 할당값 80을 저장한다는 점에 주의하자.
4.6 값의 재할당
var score; // 변수 선언
score = 80; // 값의 할당
score = 90; //값의 재할당
이미 값이 할당되어 있는 새로운 값을 또다시 할당하는 것.
값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 변수가 아니라 상수(constant, const) 라 한다.
위 그림에서 score 변수 이전 값인 undefined와 80은 어떤 변수도 값으로 갖고 있지 않으므로 더 이상 필요하지 않다. 이러한 불필요한 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제된다. 단, 언제 해제될지는 예측할 수 없다.
자바스크립트는 가비지 콜렉터를 내장하고 있는 매니지드 언어이다.
4.7 식별자 네이밍 규칙
네이밍 규칙:
그외 규칙:
네이밍 컨벤션:
🌟 일반적으로 변수나 함수의 이름에는 카멜 케이스, 생성자 함수, 클래스 이름에는 파스칼 케이스를 사용한다.
스코프:
scope - 범위, (기회를 이룰 수 있는) 여지.
변수에 접근할 수 있는 범위.
ex. 로컬, 글로벌...
➡️ 참고 글
매니지드 언어 vs. 언매니지드 언어:
가비지 콜렉터가 내장되어 있으면 매니지드 언어, 아니면 언매니지드 언어.
예약어:
예약어(豫約語, 영어: reserved word)
컴퓨터 프로그래밍 언어에서 이미 문법적인 용도로 사용되고 있기 때문에 식별자로 사용할 수 없는 단어들이다.
ex. var, this, await, void 등등...
유니코드:
유니코드(영어: Unicode)는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다.