- Published on
2023.12.23
[딥다이브] - 06. 데이터 타입
자바스크립트에는 총 8개의 데이터 타입(값의 종류)이 있다. 8개의 데이터 타입은 원시 타입과 객체 타입으로 분류할 수 있다.
구분 | 데이터 타입 | 설명 |
---|---|---|
원시 타입 | 숫자(number)타입 | 숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존재 |
원시 타입 | 문자열(string)타입 | 문자열 |
원시 타입 | 불리언(boolean)타입 | 논리적 참(true)과 거짓(false) |
원시 타입 | undefined타입 | var 키워드로 선언된 변수에 암묵적으로 할당되는 값 |
원시 타입 | null 타입 | 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 |
원시 타입 | 심벌(symbol) 타입 | ES6에서 추가된 7번째 타입 |
원시 타입 | BigInt 타입 | 2^53-1보다 큰 정수를 표현할 수 있는 원시값 |
객체 타입 | 객체, 함수, 배열 등 |
6.1. 숫자 타입
자바스크립트의 숫자
타입은 배정밀도 64비트 부동소수점 형식을 따르므로, 모든 수를 실수로 처리한다. 정수로 표시되어도 실수라는 의미이다. 이에 이러한 특이한 결과가 나오기도 한다. 참고 문서
console.log(0.1 + 0.2) // 0.30000000000000004
console.log(0.1 + 0.2 === 0.3) // false
숫자 타입에는 다음과 같은 값도 있다.
- Infinity: 양의 무한대
- -Infinity: 음의 무한대
- NaN: 산술 연산 불가(not a number) // not a number지만, 타입은 number..
6.2. 문자열 타입
문자열
은 ''
, ""
, ``
등으로 감싸서 표현한다. 따옴표로 감싸지 않으면 식별자로 인식한다.
6.3. 템플릿 리터럴
템플릿 리터럴
은 런타임에 일반 문자열로 변환되어 처리되는 문자열 처리 기능이다. 일반 문자열 내에 줄바꿈을 추가하거나 표현식을 삽입하는 등의 처리를 할 수 있다. 또 템플릿 리터럴에서는 모든 공백이 그대로 적용된다.
멀티라인 문자열
이스케이프 시퀀스 | 의미 |
---|---|
\n | 개행(줄바꿈) |
\t | 탭(들여쓰기) |
\ | 백슬래시 작성 |
표현식 삽입
${}
를 사용해 표현식을 감싸면 문자열로 변환되어 삽입할 수 있다.
6.4. 불리언 타입
불리언
타입의 값은 true
, false
두가지 뿐으로 조건문에서 자주 사용된다.
6.5. undefined 타입
undefined
타입의 값은 undefined
가 유일하다. undefined는 개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값이다. 변수에 undefined를 할당하는 것은 취지와 어긋나므로, 변수에 값이 없다는 것을 명시할 때는 null
을 할당하는 것을 권장한다.
6.6. null 타입
null
타입의 값은 null
이 유일하다. 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다. 이전에 할당되어 있던 값의 참조가 없어지므로 자바스크립트 엔진이 가비지 콜렉션을 수행한다.
6.7. 심벌 타입
심벌
타입은 중복되지 않는 값으로 유일한 프로퍼티 키를 만들기 위해 사용한다. Symbol 함수를 통해 생성하며, 심벌값은 외부에 노출되지 않는다.
6.8. 객체 타입
6.9. 데이터 타입의 필요성
데이터 타입이 필요한 이유
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
6.10. 동적 타이핑
정적 타입 언어
는 변수를 선언할 때 타입을 선언해야 한다. 이를 명시적 타입 선언
이라 한다. 정적 타입 언어는 변수 선언 시점에 변수의 타입이 결정되고 타입을 변경할 수 없지만, 자바스크립트는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수s의 타입을 변경할 수 있다. 이를 동적 타이핑
이라고 하며, 자바스크립트를 동적 타입 언어
라 한다.
변수는 타입을 갖지 않고, 변수에 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정된다.
동적 타입 언어는 편리하지만 단점이 있다. 변수의 타입이 고정되어 있지 않고 동적으로 변하는 동적 타입 언어의 변수는 값을 확인하기 전에는 타입을 확신할 수 없다. 개발자의 의도와 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 변환되기도 한다.
동적 타입 언어는 유연성은 높지만 신뢰성은 떨어진다.
변수를 사용하기 이전 데이터 타입을 체크하기 위한 과정은 번거롭고 코드의 양도 증가한다. 변수를 사용할 때 다음의 사항들을 주의하자.
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용한다.
- 변수의 유효 범위(스코프)를 최대한 좁게 만들어 변수의 부작용을 억제한다.
- 전역 변수는 최대한 사용하지 않도록 한다.
- 변수보다는 상수를 사용해 값의 변경을 억제한다.
- 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍한다.