변수란
1+2
위의 식이 있습니다. 사람의 경우 1과 2라는 숫자를 기억하고 +가 더하다는 의미인 것을 파악하고 더할 것입니다. 그리고 나온 결과 3을 뇌에서 기억합니다.
컴퓨터(자바스크립트 엔진)는 사람이 아닙니다. 컴퓨터가 위의 식을 만난다면 어떤 과정을 거치게 될까요?
자바스크립트 엔진은 1과 2, 즉 피연산자를 기억하기 위해 메모리 공간을 사용합니다. 메모리는 데이터를 저장할 수 있는 메모리 셀의 집합체로서, 메모리 셀 하나의 크기는 1바이트입니다. 컴퓨터는 1바이트 단위로 데이터를 저장하거나 읽어 들입니다.
만약 메모리 셀 하나에 데이터가 저장되었다고 합시다. 다시 그 데이터를 참조하기 위해서는 어떻게 해야될까요? 우리가 친구의 집에 찾아갈 때 주소를 알아야 찾아가듯이 자바스크립트 엔진도 마찬가지입니다. 메모리 셀에는 고유의 메모리 주소가 있습니다. 0부터 시작해서 메모리의 크기만큼 정수로 표현됩니다.
컴퓨터는 모든 데이터를 2진수로 처리합니다. 그렇기 떄문에 메모리에 저장되는 데이터는 데이터의 종류와 상관없이 모두 2진수로 저장됩니다.
다시 예시로 돌아가봅시다. 자바스크립트 엔진은 1과 2를 메모리 셀에 각각 저장을 합니다. 그런 다음 연산을 해야되는데 CPU가 그 역할을 담당합니다. CPU가 연산을 하면 결과값 3을 얻을 수 있는데, 3 역시 기억을 해야 참조할 수 있기 때문에 메모리 셀에 따로 저장합니다.그러면 3개의 메모리 셀에는 각각 1과 2 그리고 3이 저장되게 됩니다.
컴퓨터의 연산 과정이 간단하죠? 그런데 문제가 있습니다. 먼저 메모리 셀 주소에 직접적으로 접근할 수 없습니다. 이는 실수로 운영체제가 사용하고 있는 겂을 변경하면 시스템을 멈추게 하는 오류를 막기 위함입니다. 또한 프로그램이 실행될 때마다 저장되는 메모리 셀 주소는 랜덤입니다. 주소가 고정적이지 않기 때문에 애초에 주소를 기억하는 것은 불가능합니다. 이에 프로그램 언어는 데이터를 저장하고, 참조하여 재사용하기 위해 변수를 사용합니다.
변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름입니다. 좀 더 쉽게 정의하면 값의 위치를 가리키는 주소라고 할 수 있습니다.
변수에 데이터를 저장하는 것을 할당 혹은 대입이라 하며, 저장된 데이터를 읽어 들이는 것을 참조라 합니다.
식별자는 뭘까?
식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말합니다. 그렇다는 것은 변수 또한 식별자에 해당이 됩니다.
그리고 여기서 체크해야될 포인트는 변수에 데이터가 저장되는 것이 아니라 메모리 공간에 데이터가 저장되는 것이고, 변수에는 해당 메모리 공간의 주소가 저장되는 것입니다.
식별자는 네이밍 규칙을 준수해야 하며, 선언을 통해 자바스크립트 엔진에 식별자 존재를 알립니다.
변수 선언하는 방법에는 var, let, const가 있어요
변수를 사용하려면 선언을 해주어야 됩니다. 변수를 선언할 때는 var, let, const 키워드를 사용합니다. 이 3가지 키워드는 추후 포스팅으로 추가설명하겠습니다.
자바스크립트 엔진은 선언단계 -> 초기화 단계를 거치며 변수 선언을 하게 됩니다. 선언 단계에서는 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알리고, 초기화 단계에서 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당(var 키워드만 해당)합니다. var 키워드가 초기화 단계에서 undefined를 암묵적으로 할당하는 이유는 이전에 다른 애플리케이션이 사용했던 값이 남아있을 수 있기 때문에 이러한 위험을 예방하기 위함입니다.
선언 단계를 거친 후 값의 할당이 이루어집니다.
여기서 체크해야될 포인트는 변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다는 것입니다. 값이 할당 혹은 재할당될 때는 다른 메모리 셀에 저장됩니다.
식별자 네이밍 규칙
식별자는 특수문자를 제외한 문자, 숫자, 언더스코어, 달러 기호를 포함할 수 있습니다. 단, 식별자는 특수문자를 제외한 문자, 언더스코어, 달러 기호로 시작해야 하며, 숫자로 시작할 수 없습니다. 또한 예약어는 식별자로 사용할 수 없습니다.
네이밍 컨벤션
네이밍 컨벤션의 경우 여러가지 종류가 있습니다. 그중 대표적으로 카멜 케이스, 스네이크 케이스, 파스칼 케이스, 헝가리언 케이스가 있는데, 저는 자바스크립트 파일에서는 카멜케이스를 즐겨씁니다.😊
'JAVASCRIPT > 자바스크립트 이론' 카테고리의 다른 글
자바스크립트에서 this는 어떻게 바인딩될까 (5) | 2021.01.26 |
---|---|
프로토타입이란 (0) | 2021.01.26 |
var 키워드와 let, const 키워드의 차이점 (2) | 2021.01.25 |
스코프란 (3) | 2021.01.24 |
Falsy한 값 유형 (0) | 2020.06.16 |