데이터 타입 종류
- 데이터 타입 data type은 값의 종류를 뜻함
- 자바스크립트의 모든 값은 데이터 타입을 갖음
- ES6는 7개의 데이터 타입을 제공하며, 각 타입은 원시 타입 primitive type과 객체 타입 object/reference type으로 분류
구분 |
데이터 타입 |
설명 |
원시 타입 |
숫자 number |
숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존재 |
문자열 string |
문자열 |
불리언 boolean |
논리적 참(true)과 거짓(false) |
undefined |
var 키워드로 선언된 변수에 암묵적으로 할당되는 값 |
null |
값이 없다는 것을 의도적으로 명시할 때 사용되는 값 |
심벌 symbol |
다른 값과 중복되지 않는 유일무이한 값. ES6에서 추가 |
객체 타입 |
객체, 함수 배열 등 |
숫자 number 타입
- 자바스크립트는 하나의 숫자 타입만 존재 / 자바나 c는 int, long, float, double 등 정수와 실수로 타입을 구분함
- ECMAScript 사양에 따르면 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식
- 즉, 모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입 interger type이 별도로 존재 x
- 숫자 타입은 추가적으로 세 가지 특별한 값도 표현할 수 있음
- Infinity: 양의 무한대
- -Infinity: 음의 무한대
- NaN: 산술 연산 불가 not-a-number
// 숫자 타입은 모두 실수 처리
console.log(1 === 1.0); // true
// 숫자 타입의 세 가지 특별한 값
console.log(10 / 0); // Infinity
console.log(-10 / 0); // -Infinity
console.log(1 * 'String') // NaN
문자열 string 타입
- 텍스트 데이터를 나타내는데 사용
- 0개 이상의 16비트 유니코드 문자( UTF-16)의 집함으로 전세계의 대부분 문자 표현 가능
- 작은따옴표(' '), 큰따옴표(" "), 백틱(` `) 사용, 일반적으로는 작은따옴표 사용
- 자바스크립트의 문자열은 원시 타입이며, 변경 불가능한 값 immutable value
템플릿 리터럴 template literal
- ES6부터 도입
- 멀티라인 문자열 multi-line string, 표현식 삽입 expression interpolation, 태그드 템플릿 tagged template 등 편리한 문자열 처리 기능 제공
- 템플릿 리터럴은 일반적인 따옴표가 아닌 백틱(` `)사용
멀티라인 문자열
- 일반적인 문자열 내에서는 줄바꿈이 허용되지 않음
- 일반적인 문자열 내에서 줄바꿈을 표현하기 위해서는 백슬레쉬(\)로 시작하는 이스케이프 시퀀스 escape sequence를 사용해야 함
- 템플릿 리터럴 내에서는 이스케이프 시퀀스 사용하지 않고 줄바꿈이 허용되며, 모든 공백도 그대로 적용됨
// template1과 template2의 출력 결과는 같다
var template1 = '<ul>\n\t<li><a href="##>Home</a></li>\n</ul>';
var template2 = `<ul>
<li><a href="##>Home</a></li>
</ul>
`
표현식 삽입
var first = "Hongyeop";
var last = "Jin";
// ES6 표현식 삽입
console.log(`My name is ${first} ${last}.`)
불리언 타입
- 논리적 참, 거짓을 나타내는 true와 false만 존재
- 프로그램의 흐름을 제어하는 조건문에서 많이 사용됨
undefined 타입
- var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화
- 개발자가 의도적으로 할당을 위한 값이 아닌, 자바스크립트 엔진이 변수를 초기화할 때 사용되는 값
- 의도적으로 갓이 없다는 것을 명시하기 위해서는 null 사용
null 타입
- 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재 intentional absence)할 때 사용
- 함수에서 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함
var elemnet = document.querySelector('.myClass');
console.log(element); // null
심벌 타입
- ES6에서 추가된 7번째 타입
- 변경 불가능한 원시 타입의 값
- 심벌 값은 다른 값과 중복되지 않은 유일무이한 값
- 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해서 사용
// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key); // symbol
// 객체 생성
var obj = {};
// 이름이 충돌할 위험이 없는 유일무이한 값이 심벌을 프로퍼티 키로 사용
obj[key] = 'value';
console.log(obj[key]); // value
객체 타입
- 자바스크립트는 객체 기반의 언어
- 자바스크립트를 이루고 있는 거의 모든 것이 객체
데이터 타입의 필요성
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
동적 타이핑
정적 타입 언어 static/strong type
- C, C++, java, kotlin, go, haskell, rust, scala
- 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야 함, 이를 명시적 타입 선언 explicit type declaration이라고 함
- 변수의 타입을 변경할 수 없으며, 변수 선언한 타입에 맞는 값만 할당 가능
- 컴파일 시점에 타입 체크 수행, 타입 체크를 통과 실패 시 에러 발생
- 타입의 일관성을 강제하여 안정적인 코드의 구현을 통해, 런타임에서 발생하는 에러를 줄임
동적 타입 언어dynamic/weak type인 javascript
- 변수를 선언할 때 타입 선언 x, 키워드(var, let, const)를 사용해 변수 선언
- 어떤 데이터 값이라도 자유롭게 선언 가능
- 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입 추론 type inference) 됨
- 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있음. 이를 동적 타이핑 (dynamic typing)이라고 함
- 동적 타입 언어는 유연성은 높지만 신뢰성은 떨어짐
- 다른 동적 타입 언어로는 python, PHP, ruby, lisp, perl
변수 사용 시 주의사항
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용하고 최소한으로 유지
- 변수의 유효 범위(스코프)를 최대한 좁게
- 전역 변수 사용 최대한 지양
- 변수보다는 상수
- 변수의 이름은 목적이나 의미를 알 수 있도록 신중히
- 가독성이 좋은 코드가 좋은 코드