Modern JS Deep Dive 6장의 내용을 정리한 글이다.
JS를 사용할대는 C처럼 데이터 타입별로 변수를 선언하지 않고 let, const, var 키워드를 통해서 변수를 선언하지만 JS도 모든 값은 데이터 타입을 갖는다.
크게 원시 타입과 객체 타입 두가지로 나누어 볼 수 있다.
원시 타입에는 숫자, 문자열, boolean, undefined, null, symbol 타입등이 있다.
C언어에 int, long, float, double과 다르게 JS에서는 하나의 타입으로 숫자를 정의한다.
ECMAScript의 사양에 배정밀도 64비트 부동소수점 형식을 따른다고 되어있다. 위 사양으로 모든 숫자를 처리한다고 보면 된다.
모든 숫자 타입을 실수로 처리한다.
문자열은 '', "", `` 세가지 방법으로 텍스트를 감싸서 사용을 한다.
하지만 다른 언어와 다르게 배열이나 객체가 아닌 원시 타입이기 때문에 한 번 문자열을 생성하면 수정이 불가능하다.
보통 JS같은 경우에는 처음에 변수를 선언하면 쓰레기 값인 undefined가 할당된다.
하지만 개발자가 의도적으로 변수에 할당한다면 JS의 사용 취지에 어긋나게 된다. 그래서 없는 값을 보여주고 싶을 대는 null을 사용해서 할당하는걸 추천한다.
그럼 데이터 타입은 왜 필요한 것일까?
일단 JS는 선언 단계에서는 메모리 공간의 크기가 결정 되는게 아닌 값이 변수에 할당되는 과정에서 메모리의 공간의 크기가 결정된다.
예를들어 위 코드에서 a와 b는 100인 숫자타입을 할당하니 그만큼의 공간이 할당이 된다.
여기서 중요한점이 100자체를 저장하는 메모리 공간을 a에 연결해주고 b도 마찬가지로 연결한다는점이다.
b에 할당할 때 새로운 100을 새로운 메모리공간에 할당하는게 아닌 기존의 100메모리 공간을 가리키도록 내부에서 설계됐다.
즉 결론은
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
앞에서 JS는 할당될때 마다 메모리 데이터 타입이 바뀐다고 했다.이런 특징을 동적 타이핑이라고 한다.
위와 같은 특징은 전체적인 측면에서는 내 코드의 신뢰성이 떨어지기 때문에 좋은 방법이 아니다. 내가 작성했던 코드를 다른 동료 개발자가 변수를 수정하는 경우에 예상치 못한 에러가 발생할 확률이 높다.