모던 JS Deep dive #06 | 데이터 타입

📌 데이터 타입

데이터 타입은 값의 종류를 말하며 JS에서는 7개의 데이터 타입을 제공한다. 원시타입인 [숫자, 문자열, 불리언, undefined, null, symbol]과 객체 타입이 있다.

  • 숫자: 정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 64bit 부동소수점 형식의 2진수로 저장된다. 그리고, 3가지 특별한 값(Infinity, -Infinity, NaN)이 있다.
  • 문자열: 16bit 유니코드 문자의 집합으로 이루어져 거의 모든 문자가 표현 가능하고, ES6부터 템플릿 리터럴이라는 표기법을 도입해서 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공한다.
  • 불리언: true, false만 존재한다.
  • undefined: 앞 장에서 봤듯이 JS엔진이 변수를 자동으로 초기화할 때 사용되기 때문에 개발자가 의도적으로 변수에 할당하면 본래 취지와 어긋나므로 비추한다.
  • null: 변수 입장에서는 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미로 쓰인다.(JS엔진의 가비지 컬렉터가 회수) 함수 입장에서는 함수가 유효한 값을 반환할 수 없는 경우에 명시적으로 null을 반환한다.
  • symbol: ES6에서 추가된 7번째 타입으로 변경 불가능한 원시 타입의 값이다. 심벌 이외의 원시타입의 값은 리터럴을 통해 생성하지만 심벌은 Symbol함수를 호출해서 생성한다.
  • 객체: 일단은 JS는 객체 기반의 언어이며, JS를 이루고 있는 거의 모든 것이 객체라는 것만 알아두자.

📌 심벌 테이블

컴파일러나 인터프리터는 이 자료구조를 통해 식별자를 키로 바인딩된 값의 메모리 주소, 데이터 타입, 스코프 등을 관리한다.


📌 동적 타이핑 vs 정적 타이핑

C, Java같은 정적 타입 언어는 변수의 타입을 변경할 수 없으며, 컴파일 시점에서 타입 체크를 수행한다.

JS의 변수는 선언이 아닌 할당에 의해 타입이 결정(type inference)된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변한다.