Data Type : 값의 종류. JS의 모든 값은 데이터 타입을 갖는다. 데이터 타입은 값을 변경할 수 없는(immutable) 원시타입 8개와 값 변경이 가능한(mutable) 객체 타입 으로 분류할 수 있다.
✅ Number(숫자 타입)
- 8byte
- 64비트 부동소수점 형식을 따른다. 모든 수를 실수로 처리한다.
- JS는 대소문자를 구별하기 때문에
NaN
이 아닌 NAN, Nan은 식별자로 해석한다.
✅ BigInt(숫자 타입)
- 임의 정밀도로 정수를 나타낼 수 있는 자바스크립트의 숫자 원시 형식이다.
- BigInt를 사용하면 Number의 정수 한계를 넘어서는 큰 정수도 안전하게 저장 및 연산할 수 있다.
- BigInt는 정수 끝에 n을 추가하거나 생성자를 호출하여 생성된다.
✅ String(문자열 타입)
- 큰따옴표 " 또는 작은따옴표 '로 감싼다.
- JS에서의 문자열은 원시 타입으로, 변경 불가능한 값이다.
✅ Template Literal(템플릿 리터럴)
- ES6부터 도입된 문자열 표기법
- ` 벡틱으로 감싼다.
- 🔰 기존 문자열은 공백, 백스페이스, 개행 등을 나타내려면 이스케이프 시퀀스(\0, \b, \n 등)를 사용해야 했다.
- 템플릿 리터럴 내에서는 이스케이프 시퀀스 없이 문자열을 있는 그대로 표현 가능하다.
var template = '<ul>\n\t<li>list<li>\n<ul>'
var template = '<ul>
<li>list<li>
<ul>'
- 🔰 템플릿 리터럴 내에서는 표현식 삽입을 통해 간단히 문자열을 삽입할 수 있다.
var last = "Jinyoung";
var first = "Song";
console.log(`My name is ${first} ${last}`);
- 표현식 삽입은 반드시 템플릿 리터럴 내에서만 사용해야 한다.
✅ Boolean(불리언 타입)
- 논리적 참과 거짓을 나타내는 true, false다.
✅ Undefined
- var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화된다.
- 변수 선언에 의해 확보된 메모리 공간을 빈 상태로 두지 않고 undefined로 초기화한다.
- 변수에 값이 없음을 명시하고 싶다면 null을 할당해라.
- 개발자가 의도적으로 할당하게 되면 취지와 어긋날 뿐더러 혼란을 가져올 수 있다.
✅ null
- 값이 없음을 의도적으로 명시할 때 사용한다.
- 이전에 할당되어 있던 값에 대한 참조를 제거한다.
- 이전에 할당되어 있던 값에 대해 가비지 콜렉션이 일어난다.
- 함수가 유효한 값을 반환할 수 없을 때에도 null을 반환한다.
✅ Symbol(심볼 타입)
- ES6에서 추가된 변경 불가능한 원시 타입 값이다.
- 다른 값과 중복되지 않는 유일무이한 값이다. -> 이름이 충돌할 위험이 없는 유일한 키를 만들기 위해 사용한다.)
- Symbol 함수를 호출해 생성한다.
var key = Symbol('key');
✅ 객체 타입
- 위 타입을 제외한 모든 타입은 객체 타입이다.
- list, map, set 등
❓ 데이터 타입의 필요성
1. 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
2. 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리 공간의 확보와 참조
- 값을 저장할 때 데이터 타입에 따라 공간을 확보한다.
- 값을 참조할 때 또한 데이터 타입에 따라 읽어 올 메모리 셀의 크기를 인식할 수 있다.
3. 메모리에서 읽어들인 2진수를 어떻게 해석할지 결정하기 위해
- 데이터 타입에 의한 값의 해석
- 읽어들인 2 진수를 데이터 타입에 맞추어 해석할 수 있다.
- 0100 0001을 숫자로 해석하면 65지만 문자열로 해석하면 A이다.
❓ 동적 타이핑
- JS는 변수를 선언할 때 타입을 선언하지 않는다.
- 선언이 아닌 할당에 의해 타입이 결정되고, 언제든지 변경할 수 있다.
- 이러한 특성 때문에 JS는 동적 타입 언어이다.
- BUT 개발자의 의도와 상관없이 타입이 자동적으로 변화하기도 하므로, 유연성이 높지만 신뢰성이 떨어진다.
- 개발자가 실수로 type을 변경한 경우 에러로 잡지 않으니 캐치할 방법이 없다.
<주의할 점>
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용하기. -> 개수가 많으면 오류가 발생할 가능성이 높다.
- 재할당 피하기
- 스코프를 최대한 좁게 -> 함수는 하나의 일만 하도록 하기!
- 전역변수는 최대한 지양
- 변수보다는 상수를 사용해 변화를 억제하기
- 변수 네이밍은 목적, 의미를 파악할 수 있도록 하기
- 반드시 초기화 해주기.
🔎 한눈에 보는 data type
구분 | 타입 | 설명 |
---|
원시 타입 | Number | 정수,실수 구분 없이 숫자 타입만 존재. |
`` | String | 문자열 |
`` | boolean | 논리적 값. (true / false) |
`` | undefined | var로 선언된 변수에 기본으로 할당되는 값. |
`` | null | 값이 없다는 것을 의도적으로 명시할 때 사용 |
`` | symbol | ES6에서 추가된 타입. |
객체 타입 | | 객체, 함수, 배열 |
<모던 자바스크립트 deepdive와, 추가 탐구한 내용을 정리한 포스트입니다.>