본문 바로가기
JAVASCRIPT & TYPESCRIPT

JavaScript 변수(variable)와 식별자(identifier)

by ™ℬℑ 2022. 7. 19.

 

변수란 무엇인가?

 

컴퓨터는 cpu를 사용해 연산작업을 하고, 메모리를 사용해 데이터를 기억한다.

메모리는 데이터를 저장할 수 있는 집합체다. 메모리 셀 하나의 크기는 1바이트(8비트)이며 1바이트 단위로 데이터를 저장하거나 읽는다. 메모리 셀에 저장된 정보는 각자 주소를 가지고 있다. 이 메모리 주소는 메모리 공간의 위치를 나타낸다. 

입력했던 값과 계산했던 식을 다시 가져오고 싶을 때 과연 우리는 어떤 방식으로 접근해야 하는가. 

값이 저장된 메모리 공간에 직접 접근하는 것 외에는 별다른 방법이 없다. 

하지만 메모리 주소를 통해 값에 직접 접근하는 것은 엄청난 오류를 발생시킬 가능성이 상당히 크고 매우 위험하다.

그래서 자바스크립트는 메모리 제어를 허용하지 않는다. 그러므로 우리는 변수를 이용하여 메모리 주소에 접근한다.

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

따라서 개발자가 직접 메모리 주소를 통해 값을 저장하고 참조할 필요없이 변수를 통해 안전하게 값에 접근한다.

 

 

변수를 이용해서 변수에 값을 담고 연산을 해보자.

var x = 150;      숫자 150을 변수 x에 담는다.
var y = 200;      숫자 200을 변수 y에 담는다.
var result = x + y;   변수 x와 y 합을 변수 result에 담는다

* var는 여러 가지 단점이 있다. 대표적인 단점은 블록 레벨 스코프가 아니라 함수 레벨 스코프란 것이다.

  그래서 ES6에서 새로운 변수 선언 키워드인 let과 const를 도입하고 적극 사용을 권장한다.

 

위 코드대로 변수 선언키워드 var를 통해 변수를 선언했다. x라는 변수에 숫자 값 150을 할당했다.

이런 식으로 오른쪽 값을 왼쪽 변수에 담는다고 이해하면 편하다.

 

 

메모리주소와 변수

변수를 선언하면 위 그림처럼 메모리 중 00000001이란 메모리 주소에 150이라는 값이 저장된다. 

그리고 00000004이란 메모리 주소에 200이라는 값이 저장되었다.

(실제 메모리 주소는 순서대로 생성되지 않는다. 편의를 위해 순서대로 나열했다.)

 

마지막으로 두 값을 계산(x + y)한 값을 00000008이란 메모리 주소에 저장하였다. 이렇게 변수를 선언하면 그 메모리 주소에 값을 넣어둔다.

 

식별자란 무엇인가? 

식별자란

식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다. 예를 들어 사람을 이름과 별명으로 구별하여 식별하는 것처럼 값도 식별자로 구별해서 식별한다. 값은 메모리 공간에 저장되어 있기 때문에 메모리 공간 내에서 어떤 값을 구별하여 식별해낼 수 있어야 한다. 이를 위해서 식별자는 메모리 주소를 기억(저장)해야 한다. 위 그림처럼 result는 값 350을 식별할 수 있다. 즉 식별자는 값이 저장되어 있는 메모리 주소와 매핑 관계를 맺으며, 이 매핑 정보도 메모리에 저장되어야 한다.

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

즉, 식별자는 메모리 주소에 붙인 이름이라고 할 수 있다.

 

식별자라는 용어는 변수 이름에만 적용되는 것이 아니다. 예를 들어 변수, 함수, 클래스, 배열 등의 이름은 모두 식별자다.

식별자인 변수 이름으로는 메모리상에 존재하는 변수 값을 식별할 수 있고, 함수 이름으로는 메모리상에 존재하는 함수를 식별할 수 있다. 즉 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자라고 부른다.

변수와 식별자는 똑같은 말 같지만 서로 다른 의미이다. 

 

기본 용어인 변수와 식별자에 대해 알아보았다. 변수와 메모리 주소의 관계를 잘 이해하면 다음에 공부할 원시 값과 객체에 대해서 이해하기 한결 쉬워진다. 메모리주소와 변수의 관계는 제일 기본이면서 제일 중요한 부분이기 때문에 꼭 이해하고 넘어가길 바란다.

 

(*도서 "모던 자바스크립트 Deep Dive"를 참고하여 글을 작성함.)

 

 

댓글