# 06장 데이터 타입

## 데이터 타입

* 데이터 타입 = 타입 = 값의 종류
* ES6부터 7개의 데이터 타입을 제공
  * 원시타입
    * 숫자
    * 문자열
    * 불리언
    * undefined
    * null
    * symbol
  * 객체타입

## 숫자타입

자바스크립트는 하나의 숫자 타입만 존재한다. ( 다른 언어들은 int, integer, long ... 많음)

\| Q. TypeScript 는 숫자의 타입을 따로 구분하고 있을까?

모든 수는 실수

64비트 부동소수점 형식

양의 무한대/음의 무한대/Not a Number = NaN

* NaN ≠ Nan ≠ nan, Only NaN means 'Not a Number'

|Q. What is 양의 무한대, 음의 무한대?

## 문자열타입

* '' 작은 따옴표
* "" 큰 따옴표
* \`\`백틱
  * 멀티라인, 공백

자바스크립트의 문자열은 원시 타입이며, 변경 불가능한 값이다. 이것은 문자열이 생성되면 그 문자열을 변경할 수 없다는 것을 의미한다.

|Q. 원시타입이기 때문에 메모리에 변수를 할당할때 그 변수 주소값을 아예 바꿔버리는 걸까?

## 불리언타입

* true, false

## undefined타입

* undefined가 유일
* 자바스크립트 엔진이 메모리 공간을 확보한 다음 초기화 할때 주로 사용한다.&#x20;
* 개발자가 의도적으로 빈 값임을 표현하기 위해 undefined를 사용하는 것은 지양된다. (이런 경우가 있다면 null을 쓰는것을 지향)

\| 자바스크립트 엔진에 의해 묵시적으로 false로 평가되는 값은  null, '', undefiend인데 서로 성격이 조금씩 다르네..

## null타입

* null 유일
* &#x20;null ≠ Null ≠ NULL, Only null means '의도적 부재'
* 함수에서 값이 반환하지 않거나 되지 않을 경우 null을 반환하기도 한다. (undefined가 반환되는 것이 타당하다는 의견도 있음)

## symbol타입

* 원시타입
* Symbol 함수를 통해서만 생성됨
  * `var Key = Symbol('key');`
* 외부에 노출되지 않으며, 다른 값과 중복 되지 않는 유일 무이한 값

|Q. 소스 코드 상 외부에 노출 되지 않으면서 유일해야하는 코드성 데이터들에 사용하는 걸까? 사용 용례가 궁금하다.

## 객체타입

* 자바스크립트는 객체 기반 언어
* 원시 타입 ↔︎ 객체타입
* 11장 참고
  * 객체타입은 변경 가능한 값을 뜻한다.
  * 원시타입은 변경 불가능한 값을 뜻한다.
  * 객체타입을 복사해서 다른 변수에 할당 할 경우 해당 객체 타입의 주소값이 두번 째 변수의 메모리 공간에 저장됨. (바로가기 개념)
  * 원시타입을 복사해서 다른 변수에 할당 할 경우 해당 원시 타입의 원시값이 두번 째 변수의 메모리 공간에 값 자체가 저장된다. (복사 개념)

## 데이터타입의 필요성

* 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
* 값을 참조할 때 한 번에 읽어야 하는 메모리 공간의 크기를 파악하기 위해
* 메모리에서 읽어들인 01010101 어쩌고 2진수를 어떻게 해석할지 결정하기 위해
  * 같은 2진수라도 어떨땐 문자열 A 어떨 땐 숫자 25

## 동적타이핑 vs 정적타이핑

자바스크립트의 모든 값은 타입을 가진다.&#x20;

동적타이핑

* 변수에 할당된 값에 따라서 타입이 결정된다.

정적타이핑

* 변수를 선언할 때 할당 할 수 있는 값의 종류, 즉 타입을 지정해준다.
