자바스크립트는 7개의 데이터 타입을 제공한다.

구분 데이터 타입 설명
원시 타입 숫자 number 숫자. 정수와 실수 구분이 없다.
문자열 string 문자열
불리언 boolean true, false
undefined var 키워드로 선언된 변수에 암묵적으로 할당된다.
null 값이 없다는 것을 의도적으로 명시할 때 사용된다.
심볼 symbol ES6에서 새로 추가된 타입
객체 객체, 함수, 배열 등

숫자 타입

정수와 실수의 구분이 없고, 모든 수를 실수로 처리한다.
아래와 같은 특별한 값도 표현이 가능하다.

  • Infinity
  • -Infinity
  • NaN (Not a Number)

문자열 타입

ES6부터 템플릿 리터럴(template literal)이 도입되었다.

불리언 타입

truefalse 만 존재한다.

undefined 타입

undefined만 존재한다.

null 타입

null 만 존재한다. 의도적으로 값이 없다는 것을 명시하기 위해 사용한다.
또한 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다.

함수가 유효한 값을 반환할 수 없는 경우에 명시적으로 null을 반환하기도 한다.

심볼 Symbol 타입

ES6에서 추가된 타입으로, 변경이 불가능한 원시 타입이다.
다른 값과 중복되지 않는 유일무이한 값이다.

다른 원시 타입들과 다르게 심볼은 Symbol 함수를 호출해 생성한다.

33장. Symbol 공부 이후 내용 추가 예정

왜 데이터 타입이 필요한가?

  1. 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
  2. 값을 참조할 때 한 번에 읽어 들여야 하는 메모리 공간의 크기를 결정하기 위해
  3. 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해

ECMAScript 사양은 문자열과 숫자 타입 외의 데이터 타입의 크기를 명시적으로 규정하지 않는다. 따라서, 문자열과 숫자 타입을 제외하고 데이터 타입에 따라 확보되는 메모리 공간의 크기는 자바스크립트 엔진의 구현에 따라 다를 수 있다.

동적 타이핑

자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다.
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.

이를 동적 타이핑 dynamic typing이라고 한다.

변수 값이 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서는 변화하는 변수의 값을 추적하기 어려울 수 있다.
더욱이 자바스크립트는 개발자의 의도와 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동으로 변환되기도 한다.
즉, 유연성은 높지만, 신뢰성은 떨어진다.

이를 부족한 신뢰성을 올리기 위해 TypeScript를 쓴다.

컴퓨터가 이해하는 코드는 어떤 바보라도 쓸 수 있다. 하지만 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 쓴다.

Martin Fowler, 《리팩토링》 저자

0개의 댓글