index
1. 데이터 타입(type)이란 무엇인가?
자바스크립트의 모든 값은 데이터 타입을 갖는다. 자바스크립트는 7개의 데이터 타입을 제공한다. 7개의 데이터 타입은 원시타입(primitive type)과 객체 타입으로 분류할 수 있다.

DataType
Ungmo Lee. (2020). Modern Javascript DeepDive. wikibooks. p.59.
Q. 데이터 타입이 필요한 이유는 무엇인가?
- ① 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- ② 값을 참조 할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- ③ 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
1.1 데이터 타입에 의한 메모리 공간의 확보
자바스크립트 엔진은 데이터 타입, 즉 값의 종류에 따라 정해진 크기의 메모리 공간을 확보한다. 즉, 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다.
1.2 데이터 타입에 의한 메모리 공간의 참조
자바스크립트는 할당되어 있는 값에 따라 타입을 인식해서 읽어 들어야 하는 메모리 셀의 크기를 알 수 있다. 예를 들어, 숫자타입은 8바이트 단위로 저장되므로 숫자값이 할당된 변수를 참조하면 8바이트 단위로 메모리 공간에 저장된 값을 읽어 들인다.
1.3 데이터 타입에 의한 값의 해석
모든 값은 데이터 타입을 가지며, 메모리에 2진수, 즉 비트의 나열로 저장된다. 메모리에 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있다. 예를 들어, 메모리에 저장된 값 0100 0001을 숫자로 해석하면 65이지만 문자열로 해석하면 ‘A’다. 자바스크립트는 할당 된 값에 따라 데이터 타입을 알 수 있으므로, 타입을 기반으로 2진수를 할당된 숫자로 해석한다.
2. 동적 타이핑과 정적 타이핑
2.1 정적 타이핑
ex) C, C++, 자바(Java), 코틀린(Kotlin), 고(Go), 하스켈(Haskell), 러스트(Rust), 스칼라(Scala)
C나 자바 같은 정적 타입언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류,
즉 데이터 타입을 사전에 선언해야 한다.
📌 타입 설정 시점: 변수 선언할 때
char c;
// C 변수에는 1바이트 정수 타입의 값(-128 ~ 127)만 할당할 수 있다.
int num;
// num 변수에는 4바이트 정수 타입의 값(-2,124,483,648 ~ 2,124,483,647)만 할당할 수 있다.
2.2 동적 타이핑
ex) 자바스크립트(javascript), 파이썬(Python), PHP, 루비(Ruby), 리스프(Lisp), 펄(Perl)
자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다.
다만 var, let, const 키워드를 사용해 변수를 선언할 뿐이다. 어떠한 데이터 값이라도 자유롭게 할당할 수 있다.
즉, 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
📌 타입 설정 시점: 값 할당할 때
var foo;
console.log(typeof foo); // undefined
foo = 3;
console.log(typeof foo); // number
foo = "Hello";
console.log(typeof foo); // string
foo = true;
console.log(typeof foo); // boolean
foo = null;
console.log(typeof foo); // object
foo = symbol();
console.log(typeof foo); // symbol
foo = {};
console.log(typeof foo); // object
foo = [];
console.log(typeof foo); // object
foo = function () {};
console.log(typeof foo); // function
동적타입 언어는 유연성은 높지만 신뢰성은 떨어진다.
따라서, 변수를 사용할 때 몇가지 주의사항을 마음속에 새겨두자!!
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용하자 !
- 변수의 유효 범위는 최대한 좁게 만들어 변수의 부작용을 억제하자 !
- 전역 변수는 최대한 사용하지 말자 !
- 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍 하자 !