데이터 타입

데이터 타입

데이터 타입은 프로그래밍 언어에서 사용할 수 있는 데이터의 종류들이자 기본적인 구성 요소이다. 변수에서 살펴봤듯이 자바스크립트에서는 데이터 타입이 동적 할당된다.
그래서 자바스크립트는 동적 타입 언어라고 부른다.

자바스크립트는 크게 primitive type(원시타입), Object type으로 나눈다.

원시 타입에는 Number, String, boolean, undefined, null, Symbol(ES6)가 있다.

그 외에는 모두 Object(이하 객체)이다.

원시 타입

그래서 원시 타입은 immutable하고 pass-by-value(값에 의한 전달)의 속성을 갖는다.

pass-by-value는 값이 복사되어 전달된다는 의미이다. 메모리의 Stack 영역에 고정된 메모리 영역을 점유하여 저장된다.

Number

c나 java같은 경우는 int, long, float, double 등 여러가지의 유형이 존재하지만 자바스크립트는 그런거 없다. 그냥 범위 내에서 다 때려박는다.

-(253 -1) 와 253 -1 사이의 숫자값에서는 그냥 마음대로 쓴다. 즉 모든 수를 실수 처리 한다.

추가적인 개념으로 Infinity, -Infinity, NaN이 있다.

String

텍스트 데이터를 지정할 때 사용한다. 문자열 역시 변경 불가능하다.

var str = 'Hello';
str = 'world';

변경되는데????

Hello와 world는 모두 메모리에 존재하고 str이 가리키는 것이 바뀌었을 뿐이다.

또한 string은 유사 배열이다

var str = 'string';
// 문자열은 유사배열이다.
for (var i = 0; i < str.length; i++) {
  console.log(str[i]);
}

// 문자열을 변경할 수 없다.
str[0] = 'S';
console.log(str);

문자열은 배열처럼 인덱스에 접근할 수 있다.

undefined

선언은 되었지만 값을 할당하지 않은 변수에 접근하거나 존재하지 않는 객체 프로퍼티에 접근할 경우 undefined가 할당된다.

null

null은 변수에 값이 없다는 것을 의미한다. 메모리 주소의 참조 정보를 제거한다.

Symbol

Symbol은 ES6에서 추가된 원시 값으로 자기 자시능ㄹ 제외한 그 어떤 값과도 다른 유일무이한 값이다.
그래서 충돌 위험이 없이 객체의 프로퍼티 키를 만들기 위해 사용한다.

var key = Symbol('no1');
console.log(typeof key); // no1

var obj = {};
obj[key] = 'value';
console.log(obj[key]); // value

Object Type

객체는 모든 것을 포함하는 존재이다. 그래서 원시 타입을 제외한 모든 것을 말한다. 또한 객체는 pass-by-reference(참조에 의한 전달)이다.

pass-by-reference는 객체의 모든 값이 참조로 처리되는 것을 말한다. 프로퍼티를 변경, 추가 가능한 mutable이라고 할 수 있다.

그 이유는 객체 타입은 동적으로 변화할 수 있는 메모리라 메모리의 공간을 얼마나 할당해야 하는 지 예측이 힘들기 때문에 메모리의 Heap 영역에 저장되어 메모리 공간을 확보한다.

템플릿 리터럴

ES6에서는 이스케이프 문자 등의 불편함을 개선하고자 템플릿 리터럴을 추가했다. 이를 사용하여 표현식을 문자열에 추가하거나 여러 줄로 문자열을 한 번에 작성할 수 있다.

const template = `템플릿 리터럴은 '작은따옴표(single quotes)'과 "큰따옴표(double quotes)"를 혼용할 수 있다.`;


console.log(`1 + 1 = ${1 + 1}`);