3. Data Type

데이터 타입, 자바스크립트가 제공하는 데이터 타입의 특징을 살펴보자

index

데이터 타입(type)이란 무엇인가?

동적 타이핑과 정적 타이핑



1. 데이터 타입(type)이란 무엇인가?

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

Photo of datatype

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


동적타입 언어는 유연성은 높지만 신뢰성은 떨어진다.

따라서, 변수를 사용할 때 몇가지 주의사항을 마음속에 새겨두자!!

  1. 변수는 꼭 필요한 경우에 한해 제한적으로 사용하자 !
  2. 변수의 유효 범위는 최대한 좁게 만들어 변수의 부작용을 억제하자 !
  3. 전역 변수는 최대한 사용하지 말자 !
  4. 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍 하자 !



reference: 모던자바스크립트 Deep Dive 06장.데이터 타입