var score = 100; //변수 선언과 값의 초기화
변수 score와 리터럴 100이 있다. 숫자 값 100을 저장하기 위해 메모리 공간을 살펴보겠다.
- 자바스크립트 엔진이 리터럴 100을 숫자타입의 값으로 해석
- 숫자 타입의 값 100을 저장하기 위해 8바이트 메모리 공간을 확보함
- 100을 2진수로 저장
값을 참조하는 경우
식별자 score를 통해 숫자 타입의 값 100이 저장되어 있는 메모리 공간의 주소를 찾아갈 수 있다. 값을 참조하려면 한번에 읽어들어야할 메모리 공간의 크기, 즉 메로리 셀의 개수(바이트수)를 알아야한다.
score변수의 경우, 저장되어 있는 값이 숫자 타입이므로 8바이트 단위로 읽어 들이지 않으면 값이 훼손된다.
숫자 타입은 8바이트 단위로 저장되므로, score변수를 참조하면 8바이트 단위로 메모리 공간에 저장된 값을 읽어들인다.
데이터타입에 의한 값의 해석
메모리에서 읽어들인 2진수를 어떻게 해석하느냐 하면 앞서 예제의 score변수에 할당된 값은 숫자 타입의 값이다.
따라서 score변수를 참조하면 메로리 공간의 주소에서 읽어들인 2진수를 숫자로 해석한다.
데이터 타입이 필요한 이유
- 값을 저장할 때 확보해야하는 메모리 공간의 크기를 결정하기위해
- 값을 참조할 때 한번에 읽어들여야할 메모리 공간의 크기를 결정하기 위해
- 메모리에 읽어들인 2진수를 어떻게 해석할지 결정하기 위해
동적타이핑
변수의 데이터 타입은 무엇일까?
자바는 정적 타입언어로 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언한다.
이것을 명시적 타입 선언이라고 한다.
자바스크립트는 변수를 선언할 때 타입을 선언하지 않는다. 다만 var, let, const 키워드를 사용해 변수를 선언한다.
미리 선언한 데이터 타입의 값만 할당할 수 있는 것이 아니며 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입 추론) 된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 동적 타이핑이라고 하며 자바스크립트를 동적 타입 언어라고 한다.
변수의 데이터 타입은 무엇인가? 의 답은 기본적으로 변수는 타입을 갖지 않는다. 하지만 값은 타입을 갖는다.
변수에 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정된다고 표현하는 것이 적절한다.