FE/JavaScript

[JS] 변수와 호이스팅

mandelina 2022. 2. 13. 22:32

변수란?

하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름.

 

즉, 값의 위치를 가리키는 상징적인 이름이다. 

 

식별자?

어떤값을 구별해서 식별할 수 있는 고유한 이름.

 

변수이름을 식별자 라고도 한다.

식별자는 값이 아닌 메모리 주소를 기억하고있다.

즉, 식별자로 값을 구별한다는 것은 식별자가 기억하고 있는 메모리 주소를 통해 메모리 공간에 저장된 값에 접근할 수 있다는 의미다.

 

*식별자라는 용어는 변수이름에만 국한해서 사용하지 않고 변수,함수,클래스등의 이름 모두 식별자로 쓰인다.

 

변수선언?

변수를 생성하는 것.

 

자세히 말하면 값을 저장하기 위한 메모리 공간을 확보하고, 변수이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는것이다.

변수를 선언할때는 var, let, const 키워드를 사용한다.

 

변수를 선언한 이후 값을 할당하지 않으면 자바스크립트 엔진에 의해 undefined라는 값이 암묵적으로 할당되어 초기화 된다 . (자바스크립트 특징)

 

<var>

var 키워드를 사용한 변수선언은 선언단계와 초기화 단계가 동시에 진행된다.

즉, var키워드로 선언한 변수는 어떠한 값을 할당하지 않아도 undefined라는 값을 갖는다.

 

 

 

변수 선언의 실행시점과 변수 호이스팅

 

자바스크립트 엔진은 변수 선언이 소스코드의 어디에 있든 상관없이 다른 코드보다 먼저 실행한다.

따라서 변수 선언이 소스코드의 어디에 위치하는지와 상관없이 어디서든지 변수를 참조할 수 있다.

(변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점 , 즉 런타임이 아닌 그 이전 단계에서 먼저 실행되기 때문이다.)

 

 

 

값의 할당

변수의 값을 할당할 때는 할당 연산자 = 를 사용한다.

우변의 값을 좌변의 변수에 할당한다.

 

*변수 선언은 런타임 이전에 먼저 실행되지만 값을 할당은 런타임에 실행된다.

 

 

 

값의 재할당

현재 변수에 저장된 값을 버리고 새로운 값을 저장하는것.

 

엄밀히 말하자면 변수에 처음 값을 할당하는 것도 사실은 재할당이다 .

(변수가 선언되면서 undefined로 초기화되기 때문)

 

값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 변수가 아닌 상수라 한다.

 

* 자바스크립트는 더이상 사용되지 않는 메모리를 해제하는 가비지 콜렉터가 내장되어있다.

 

(즉, 메모리 관리기능을 언어 차원에서 담당하는 매니지드 언어이다.
반대로 C언어 같은 언매니지드 언어는 개발자가 명시적으로 메모리 할당 및 해제를 위해 malloc() , free() 같은 저수준 메모리 제어 기능을 제공한다. )

 

 

식별자 네이밍 규칙

식별자는 다음과 같은 네이밍 규칙을 준수해야 한다.

 

  • 식별자는 특수문자를 제외한 문자,숫자,언더스코어(_),달러 기호($)를 포함할 수 있다.
  • 단 , 식별자는 특수문자를 제외한 문자,언더스코어(_),달러기호($)로 시작해야 한다. 숫자로 시작할 수 없다.
  • 예약어는 식별자로 사용할 수 없다.

(예약어 : 프로그래밍 언어에서 사용되고 있거나, 사용될 예정인 단어)

 

 

<네이밍 컨벤션>

 

카멜케이스 : firstName;     // 변수나 함수의 이름

 

스네이크 케이스 : first_name;

 

파스칼 케이스 : FirstName;   // 생성자함수,클래스이름

 

헝가리언 케이스 : strFirstName;

 

코드전체의 가독성을 높이려면 카멜케이스와 파스칼케이스를 따르는것이 유리하다.