6. 데이터 타입
- 데이터 타입(data type): 값의 종류
- 원시 타입(primitive type): number, string, boolean, undefined, null, symbol
- 객체 타입(object/reference type): 객체, 함수, 배열 등
6.1. 숫자 타입
- 배정밀도 64비트 부동소수점 형식: 모든 값을 실수로 처리
- 3가지 특수 값: Infinity(양의 무한대), -Infinity(음의 무한대), NaN(산술 불가)
6.2. 문자열 타입
- 0개 이상의 16비트 유니코드 문자(UTF-16)의 집합
- '', "", `` 사용
- 자바스크립트의 문자열은 원시 타입으로 변경 불가능한 값
6.3. 템플릿 리터럴
- 멀티라인(개행) 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능 제공
- 백틱(``) 사용
6.4. 불리언 타입
- 논리적 참, 거짓을 나타내는 true/false
6.5. undefined 타입
- 변수에 의해 확보된 메모리 공간에 쓰레기 값(garbage value)을 방지하기 위해 undefined로 초기화
- undefined는 변수를 초기화할 때 사용하는 값
- 변수에 값이 없다는 것을 명시하기 위해서는 null 권장
6.6. null 타입
- 자바스크립트는 대소문자를 구별하므로 Null, NULL 등과는 다름
- 변수에 값이 없음을 의도적으로 명시하기 위해 사용함(의도적 부재)
- 이전에 할당되어 있던 값을 명시적으로 제거
6.7. 심벌 타입
- ES6에서 추가된 타입, 변경 불가능한 원시 타입
- 다른 값과 중복되지 않는 유일무이한 값
- 충돌 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용
6.8. 객체 타입
- 자바스크립트는 객체 기반의 언어, 거의 모두 객체로 이뤄짐
6.9. 데이터 타입의 필요성
6.9.1. 데이터 타입에 의한 메모리 공간의 확보와 참조
- 메모리에 값을 저장하기 위해 확보해야 할 메모리 공간의 크기를 결정해야 함
- 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 달라짐
- 값을 참조할 때는 한 번에 읽어 들일 메모리 공간의 크기를 결정해야 함
6.9.2. 데이터 타입에 의한 값의 해석
- 메모리에 2진수로 저장된 값은 데이터 타입에 따라 다르게 해석됨
- ex) 0100 0001 : 숫자는 65, 문자는 'A'
6.10. 동적 타이핑
6.10.1. 동적 타입 언어와 정적 타입 언어
- 정적 타입 언어(static/strong type): 변수의 데이터 타입을 먼저 선언하고 변경할 수 없음 (명시적 타입 선언)
- 컴파일 시점에 타입 체크를 수행함(C, java)
- ex) int num -> 4바이트 정수 타입의 값만 선언 가능
- 동적 타입 언어(dynamic type): 할당에 의해 타입 결정 (타입 추론)
- var, let, const 키워드 사용하여 변수 선언
- 값을 할당하는 시점에 동적으로 타입이 결정되고, 재할당 가능 (동적 타이핑)
6.10.2. 동적 타입 언어와 변수
- 동적 타입 언어의 변수는 값을 확인하기 전까지 타입을 확신할 수 없음
- 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되기도 함
- 변수 사용 시 고려할 사항
- 변수는 필요한 만큼 최소한으로 유지
- 변수의 유효 범위(스코프)를 최대한 좁게
- 전역 변수는 최대한 지양
- 상수(const) 사용으로 값의 변경 지양
- 변수의 목적이나 의미에 맞는 적절한 네이밍
- 가독성 좋은 코드가 좋은 코드
[출처] 모던 자바스크립트, Deep Dive