오늘의 질문
데이터 타입의 종류를 알아보자
모던자바스크립트 DeepDive 6장 - 데이터 타입
<데이터 타입 종류>
원시 타입
- 숫자 타입
- 문자열 타입
- 불리언 타입
- undefined 타입
- null 타입
- 심벌 타입
객체 타입
자바스크립트는 독특하게 하나의 숫자 타입만 존재한다.
모든 수를 실수로 처리하고, 정수만을 표현하기 위한 데이터 타입이 별도로 존재하지 않는다
// 모두 숫자 타입
var integer = 10;
var double = 10.12;
var negative = -20;
var binary = 0b01000001; // 2진수
var octal = 0o101; // 8진수
var hex = 0x41; // 16진수
// 표기법만 다를 뿐, 모두 같은 값
console.log(binary); //65
console.log(octal); //65
console.log(hex); //65
console.log(binary === octal); //true
console.log(octal === hex); //true
문자열 타입은 텍스트 데이터를 나타내는데 사용한다
문자열은 0개 이상의 16비트 유니코드 문자의 집합으로 전 세계 대부분의 문자를 표현 가능
ES6부터 템플릿 리터럴이라고 하는 새로운 문자열 표기법 도입
- 멀티라인 문자열
- 표현식 삽입
- 태그드 템플릿
: 런타임에 일반 문자열로 변환되어 처리된다
일반 문자열 내에서는 줄바꿈이 허용되지 않는다.
줄바꿈을 위해서는 백슬래시 "\" 를 시작하는 이스케이프 시퀀스를 사용해야한다
그러나,
템플릿 리터럴 내에서는 이스케이프 시퀀스 없이 줄바꿈 허용
모든 공백도 있는 그대로 적용 가능!
문자열은 +를 사용해 연결할 수 있다.
문자열 연결 연산자 혹은 덧셈 연산자로 동작
그러나,
템플릿 리터럴 내에서는 표현식 삽입을 통해 간단히 문자열 삽입 가능
${}을 사용하여 표현식 삽입 : 문자열이 아니어도 강제 변환되어 삽입
논리적 참, 거짓을 나타내는 true, false 뿐
undefined는 undefined만 유일
자바스크립트 엔진이 변수를 초기화할 때 사용하는 값
변수에 값이 없다는 것을 나타낼 때에는 null을 사용
변수에 값이 없다는 것을 의도적으로 명시할 때 사용
ES6에서 추가된 7번째 타입,
변경 불가능한 원시 타입의 값
다른 값과 중복되지 않는 유일무이한 값이다.
주로 객체의 유일한 프로퍼티 키를 만들기 위해 사용
자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든 것이 객체라는 사실
var score = 100;
<메모리 공간 확보 순서>
1) 코드 실행시 숫자 100을 저장하기 위해 메모리 공간 확보
2) 확보된 메모리에 숫자 값 100을 2진수로 저장
3) 숫자 값 저장시 확보해야 할 메모리 공간 크기 파악
메모리에서 읽어들인 2진수는 데이터 타입에 따라 해석한다
데이터 타입이란 값의 종류를 말한다.
데이터 타입이 필요한 이유
- 값을 저장할 때 확보해야하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한 번에 읽어야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
명시적 타입 선언(정적 타입 언어) : 데이터 타입을 사전에 선언해야한다
컴파일 시점에 타입 체를 수행하기 때문,
자바스크립트는 변수를 선언할 때, 타입을 선언하지 않는다
var, let, const 키워드를 사용하여 변수 선언
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입 추론) 된다.
재할당에 의해 변수 타입은 언제든지 동적으로 변할 수 있다.
이를 동적 타이핑이라고 하고, 동적 타입 언어라고 한다.
동적 타입 언어의 단점
=> 유연성은 높지만 신뢰성은 떨어지는 편
변수를 사용할 때 주의할 사항
- 동적 타입 언어이기 때문에 타입을 잘못 예측할 가능성 농후, 무분별한 변수 선언 금지
- 변수의 유효 범위(스코프)를 좁게 만들어 변수의 부작용 억제해야 함
- 전역 변수는 최대한 사용하지 않도록 한다.
- 상수를 사용하여 값의 변경을 억제한다
- 변수 이름은 목적이나 의미를 파악할 수 있도록 네이밍한다.