[JavaScript] 모던 자바스크립트 Deep Dive 6장 - 데이터 타입

2022. 7. 12. 01:03Web/JavaScript


자바스크립트(ES6)의 데이터 타입


6.1 숫자 타입

자바스크립트는 C와 자바(int, long, double 등)와 다르게 하나의 숫자 타입만 존재

ECMAScript 사양에 따르면 숫자타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다.

즉, 모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입이 별도로 존재하지 않는다.

//모두 숫자 타입
var integer = 10; // 정수
var double = 10.12; // 실수
var negative = -20; // 음의 정수
// 숫자 타입은 모두 실수로 처리된다.
console.log(1 === 1.0); // true

숫자 타입의 세 가지 특별한 값

  • Infinity: 양의 무한대
  • -Infinity: 음의 무한대
  • NaN: 산술 연산 불가(not-a-number)

6.2 문자열 타입

문자열 타입은 텍스트 데이터를 나타내는 데 사용

작은따옴표(''), 큰 따옴표(""), 백틱(``)으로 텍스트를 감싼다.

//문자열 타입
var string;
string = '문자열';
string = "문자열";
string = `문자열`;

6.3 템플릿 리터럴

템플릿 리터럴은 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공, 런타임에 일반 문자열로 변환되어 처리

var template = `Template literal`
console.log(template); // Template literal

6.3.1 멀티라인 문자열

일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않아 줄바꿈 등의 공백을 표현하려면 백슬래시(\\)로 시작하는 이스케이프 시퀸스를 사용해야한다.

 


6.3.2 표현식 삽입

문자열 연산자 +를 사용하여 연결

var first = 'Joon-hyuk';
var last = 'Eo';

// ES5: 문자열 연결
console.log('My name is ' + first + ' ' + last '.'); // My name is Joon-hyuk Eo.

 

템플릿 리터럴 내에서는 표현 삽입을 통해 간단히 삽입할 수 있다.

var first = 'Joon-hyuk';
var last = 'Eo';

// ES6: 표현식 삽입
console.log(`My name is ${first} ${last}.`); // My name is Joon-hyuk Eo.

6.4 불리언 타입

불리언 타입의 값은 논리적 참, 거짓을 나타내는 true와 false뿐이다.

var foo = true;
console.log(foo); // true

var foo = false;
console.log(foo); // false

6.5 undefined 타입

undefined의 값은 undefined가 유일하다.

변수를 선언한 이후 값을 할당하지 않은 변수를 참조하면 undefined가 반환된다.

var foo;
console.log(foo); // undefined

6.6  null 타입

null 타입의 값은 null이 유일하다.

자바스크립트는 대소문자를 구별하므로 null은 Null, NULL 등과 다르다.

변수에 값이 없다는 것을 명시하고 싶을 떄는 null을 할당

 var foo = "Eo"
 
 // 이전 참조를 제거. foo 변수는 더 이상 'Eo'를 참조하지 않는다
 // 유용해 보이지 않음. 변수의 스코프를 좁게 만들기 때문에 변수 자체를 재빨리 소멸시키는 것이 좋다.
 
 foo = null;

6.7  심벌 타입

변경 불가능한 원시 타입의 값

다른 값과 중복되지 않는 유일무이한 값

// 심벌 값 생성
var key = Symbol('key');
cosole.log(typeof key); // symbol

// 객체 생성
var obj = {};

// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용
obj[key] = 'value';
console.log(obj[key]); // value

6.8 객체타입

자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루는 거의 모든 것이 객체이다.


6.9 데이터 타입의 필요성

1. 데이터 타입의 의한 메모리 공간의 확보와 참조

2. 데이터 타입에 의한 해석


6.10 동적 타이핑

 

6.10.1 동적 타입 언어와 정적 타입 언어

C나 자바 같은 정적 타입 언어는 변수를 선언할 때 데이터 타입을 사전에 선언해야한다.

char c;

int num;

자바스크립트는 정적 타입 언어와 다르게 변수를 선언 할 때 타입을 선언하지 않는다. 다만 var, let, const 키워드를 사용해 변수를 선언한다. 자바스크립트의 변수는 정적 타입 언어와 같이 미리 선언한 데이터 타입의 값만 할당할 수 있는 것이 아니다. 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.

var foo;
console.log(typeof foo); // undefined

foo = 3;
console.log(typeof foo); // number

foo = 'Hello';
console.log(typeof foo); // string

foo = true;
console.log(typeof foo); // boolean

foo = null;
console.log(typeof foo); // object

foo = Symbol(); // 심벌
console.log(typeof foo); // symbol

foo = {}; // 객체
console.log(typeof foo); // object

foo = []; // 배열
console.log(typeof foo); // object

foo = function(); // 함수
console.log(typeof foo); // function

6.10.2 동적 타입 언어와 변수

동적 타입 언어도 구조적인 단점이 있다.

  • 변수 값은 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서는 변화하는 변수 값을 추적하기 어렵다.
  • 자바스크립트는 개발자의 의도와는 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동으로 변환되기도 한다.