모던 자바스크립트 Deep Dive

[TIL/모던 자바스크립트 Deep Dive] 2023/03/14

6장. 데이터 타입(Data Type) 데이터 타입(data type)은 말 그대로 값의 종류를 말한다. JS의 모든 값은 데이터 타입을 갖는다. 자바스크립트(ES6)는 7개의 데이터 타입을 제공한다. 7개의 데이터 타입은 과 으로 분류할 수 있다. 6-1. 숫자

2023년 3월 14일2min read

6장. 데이터 타입(Data Type)

데이터 타입(data type)은 말 그대로 값의 종류를 말한다. JS의 모든 값은 데이터 타입을 갖는다. 자바스크립트(ES6)는 7개의 데이터 타입을 제공한다. 7개의 데이터 타입은 ``원시 타입(primitive type)``객체 타입(object/reference type)``으로 분류할 수 있다.

6-1. 숫자 타입(Number Type)

C 또는 Java의 경우, ``정수와 실수를 구분`하여 int, long, float, double 등, 다양한 숫자 타입을 제공한다고 한다. 자바스크립트는 `하나의 숫자 타입만`` 존재한다.

ECMAScript 사양에 따르면 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다.

바로 위의 문장이 오늘의 최대 위기였다.

컴퓨터에서 ``실수`(소수점 이하가 있는 숫자)를 표현하는 방식에는 `고정소수점 방식``부동소수점 방식``이 있다. 소수점을 고정한 상태로 실수를 표현하면 '고정소수점 방식', 소수점을 유동적으로 옮길 수 있는 상태(=부동,floating)로 실수를 표현하면 '부동소수점 방식'이다.

이러한 ``부동소수점 방식``배정밀도(Double Precision)``단정밀도(Single Precision)``로 구분된다.

배정밀도(Double Precision)```는 64비트 부동소수점 형식을 사용하여 수를 표현한다. 이름에서 추론할 수 있듯이, 더 높은 정밀도로 수를 표현할 수 있다는 장점이 있지만 그에 대한 길항 작용으로서 더 많은 메모리 공간을 필요로 한다는 단점이 있다.

#### ECMAScript 사양에 따르면 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다.

어쨌든 JS에서는 모든 수를 실수로 처리하며, 정수만을 표현하기 위한 데이터 타입은 별도로 존재하지 않는다는 것이 결론이다. 숫자 타입 part 초입에, 자바스크립트는 '하나의 숫자 타입(실수)'만 존재한다고 언급한 것이 바로 위 결론에 해당된다.

정수, 실수, 2진수, 8진수 등의 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의 ``2진수``저장``된다.

한편 JS는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기에 이들 값을 참조하면 모두 ``10진수``해석``된다.

추가적인 숫자 타입 개념

6-2. 문자열 타입(String Type)

문자열(string) 타입은 ``text data``를 나타내는 데 사용한다.

문자열은 ``작은따옴표(''), 큰따옴표(""), 또는 백틱()``으로 텍스트를 감싼다.

문자열만 따옴표로 감싸는 이유는 ``키워드 또는 식별자와 같은 토큰과 구분``하기 위해서다. 문자열을 따옴표로 감싸지 않으면 JS 엔진은 문자열이 아니라 키워드나 식별자와 같은 토큰으로 인식한다.

'hello'를 따옴표로 감싸지 않으니까, Reference Error가 등장했다. 정말 식별자로 인식한다는 점을 확인할 수 있다.

primitive type과 obj/ref type의 판단 기준

원시 타입```과 ```객체 타입```의 판단 기준은 가변성(variability)에 있다.
C```는 문자열 타입을 제공하지 않고 ```배열```로 문자열을 표현한다.

그러나 JavaScript의 문자열은 ``원시 타입``이며, 이는 곧 immutable value임을 의미한다. '문자열과 불변성'에 관한 내용은 뒤에서 다룬다고 한다.