변수 선언과 데이터 할당
변수 선언
변할 수 있는 데이터를 만든다, 이 말의 의미가 곧 변수 선언인데요.
아래 예시처럼 변수를 선언할 수 있습니다.
var a;
위 코드에서 식별자는 a가 됩니다.
변수는 결국 변경 가능한 데이터가 담길 수 있는 공간 또는 그릇이라고 생각할 수 있습니다.
이 공간에는 숫자를 담았다가, 문자열을 담는 등 다양한 명령을 통해 데이터를 변경할 수 있습니다.
Q. 이렇게 선언된 변수는 메모리 영역에서 어떻게 동작할까요?
우선 var a;
명령을 받은 컴퓨터는 메모리에서 비어있는 공간 하나를 확보합니다.
아래 그림에서는 임의로 해당 공간을 1003번으로 정하고, 공간의 이름(식별자)을 a라고 지정했습니다.
여기까지가 변수 선언 과정입니다.
이후에 사용자가 a에 접근하고자 하면 컴퓨터는 메모리에서
a라는 이름을 가진 주소를 검색해 해당 공간에 담긴 데이터를 반환할 것 입니다.
데이터 할당
한번 선언한 변수 a에 데이터를 할당해 보겠습니다.
var a;
a = 'Our group is totally awesome!';
var a = 'Our group is totally awesome!'; // 변수 선언과 할당을 한 문자으로 표현
위 2개의 방법 모두 같은 동작이 수행됩니다.
그럼
Our group is totally awesome!
이라는 문장이 a라는 이름을 가진 주소에 저장될까요?
→ 정답은 No !
데이터를 저장하기 위한 별도의 메모리 공간을 다시 확보해서 문자열 Our group is totally awesome!
을 저장하고,
그 주소를 변수 영역에 저장하는 식으로 이뤄집니다.
데이터 할당에 따른 메모리 영역의 변화는 아래와 같습니다.
- 변수 영역에서 빈 공간(@1003)을 확보한다.
- 확보한 공간의 식별자를 a로 지정한다.
- 데이터 영역의 빈공간(@5004)에 문자열
Our group is totally awesome!
을 저장한다. - 변수 영역에서 a라는 식별자를 검색한다.(@1003)
- 앞서 저장한 문자열의 주소(@5004)를 @1003의 공간에 대입한다.
위 단계를 보면 한 가지 궁금한 점이 생깁니다.
Q. 왜 변수 영역에 값을 직접 대입하지 않고, 한 단계 더 거쳐서 주소를 저장하는 걸까요?
자바스크립트는 숫자형 데이터에 대해 64bit의 데이터를 확보한다고 1-2 챕터 에서 이야기 했습니다.
반면 문자열은 특별히 정해진 규격이 없습니다.
한 글자마다 영어는 1바이트, 한글은 2바이트 등으로 각 필요한 용량이 가변적이기 때문인데요.
만약 미리 확보한 공간 내에서만 데이터 변환을 할 수 있다면,
변환된 데이터를 다시 저장하기 위해서는 확보된 공간을 변환된 데이터 크기에 맞게 늘리는 작업이 선행되어야 할 겁니다.
Q. 만약 중간에 데이터가 껴있다면 ?
전부 데이터를 옮기고 ..
주소를 다시 식별자에 연결하는 .. 아찔한 상황이 일어나겠죠.
미리 확보한 공간 내에서만 데이터를 변환하게 한다면, 컴퓨터가 해야할 연산이 많아지기 때문에
효율적으로 문자열 데이터의 변환을 처리하기 위해 데이터를 별도의 공간에 나누어 저장하는 것
입니다!
만약 Our group is totally awesome!
문자열을 Best
로 변경하면 어떻게 될까요?
기존 문장이 저장된 공간에 Best
를 할당하는 대신 새로운 공간을 만들어 저장하고 그 주소를 변수 공간에 연결합니다.
이렇게 변수 영역과 데이터 영역을 분리하면 중복된 데이터에 대한 처리 효율이 높아집니다.