
모던 자바스크립트 Deep Dive 책에 나오는 4장 변수 내용을 간략하게 요약한 내용입니다 :)
컴퓨터는 연산과 기억을 수행하는 부품이 나눠져 있는데, CPU를 통해 연산하고, 메모리를 사용해 데이터를 기억합니다.
메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체로 메모리 셀 하나의 크기는 1바이트(8비트) 이며 1바이트 단위로 데이터를 저장하거나 읽어 들입니다.
각 셀은 메모리 주소를 갖고 이 메모리 주소는 메모리 공간의 위치를 나타냅니다.
프로그래밍 언어는 기억하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어 들여 재사용하기 위해 변수라는 메커니즘을 제공합니다.
변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 메모리 공간을 식별하기 위해 붙인 이름이라고 정의 내릴 수 있습니다.
간단히 말하자면 변수는 프로그래밍 언어에서 값을 저장하고 참조하는 메커니즘으로, 값의 위치(저장된 메모리 공간)를 가르키는 상징적인 이름입니다.
메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름을 변수 이름, 변수에 저장된 값을 변수 값이라고 합니다.
변수에 값을 저장하는 것을 할당(대입, 저장)이라 하고, 변수에 저장된 값을 읽어 들이는 것을 참조라 합니다.
사람이 이해할 수 있는 언어로 명명한 변수 이름을 통해 변수에 저장된 값의 의미를 명확히 할 수 있습니다. 따라서 변수 값의 의미를 파악할 수 있는 좋은 이름은 가독성을 높이고 코드를 이해하기 쉽게 만들며, 이는 협업과 품질 향상에 도움을 줍니다.
변수 이름을 식별자 라고도 하며, 식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말합니다.
식별자는 값이 저장되어 있는 메모리 주소를 기억하고 있으며, 식별자가 기억하고 있는 메모리 주소를 통해 메모리 공간에 저장된 값에 접근할 수 있다는 의미입니다.
즉, 식별자는 메모리 주소에 붙인 이름이라고 할 수 있습니다.
식별자라는 용어는 변수 이름만을 뜻하는 것은 아니며 변수, 함수, 클래스 등 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자라고 불립니다.
변수 선언이란 변수를 생성하는 것을 말하며, 값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 것입니다.
변수를 사용하려면 반드시 선언이 필요하며 선언할 때는 var, let, const 키워드를 사용할 수 있습니다.
let, const 키워드가 도입되기 이전까지 var 키워드만 사용되었는데 여러 단점이 있었습니다.
대표적으로 블록 레벨 스코프를 지원하지 않고 함수 레벨 스코프를 지원한다는 것인데 이로 인해 의도치 않게 전역 변수가 선언되어 심각한 부작용이 발생될 수 있습니다.
자바스크립트 엔진은 변수 선언을 2단계에 거쳐 수행합니다.
- 선언 단계: 변수 이름을 등록해서 변수의 존재를 알린다.
- 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화한다.
ReferenceError(참조 에러)는 식별자를 통해 값을 참조하려 했지만 자바스크립트 엔진이 등록된 식별자를 찾을 수 없을 때 발생하는 에러로 변수를 선언하지 않았을 때 발생할 수 있는 에러입니다.
변수 호이스팅이란 변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임(runtime)이 아니라 그 이전 단계에서 먼저 실행되는 것을 의미합니다.
자바스크립트 엔진은 변수 선언을 포함한 모든 선언문(var, let, const, function, function*, class 키워드를 사용해서 선언하는 모든 식별자)을 소스코드에서 찾아내 먼저 실행합니다. 그리고 나서 소스코드를 한 줄씩 순차적으로 실행합니다.
변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라 합니다.
변수에 값을 할당할 때는 할당 연산자 = 을 사용합니다.
변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행됩니다.
재할당이란 이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것을 말하며 var와 let 키워드는 재할당이 가능하지만, const 키워드는 재할당이 불가능합니다.
식별자는 다음과 같은 네이밍 규칙을 준수해야 합니다.
예약어는 프로그래밍 언어에서 사용되고 있거나 사용될 예정인 단어를 말합니다.
네이밍 컨벤션은 하나 이상의 단어로 구성된 식별자를 만들 때 가독성 좋게 단어를 한눈에 구분하기 위해 규정한 명명 규칙입니다.
아래의 4가지 네이밍 컨벤션이 자주 사용되며 자바스크립트에서는 일반적으로 변수나 함수의 이름에는 카멜 케이스를 사용하고, 생성자 함수, 클래스의 이름에는 파스칼 케이스를 사용합니다.
와우... 엄청 디테일한 설명 잘 읽고 갑니당