하루 기록

6장, 데이터 타입 본문

Book/모던 자바스크립트 Deep Dive

6장, 데이터 타입

떼굴펜 2024. 4. 18. 21:46

 흔히 타입이라고 줄여 부르는 데이터 타입(data type)은 값의 종류를 말한다. 

자바스크립트(ES6)는 7개의 타입을 제공하며, 이는 크게 원시 타입과 객체 타입으로 나눌 수 있다.

구분 데이터 타입 설명
원시 타입 숫자 (number) 타입 정수, 실수 구분 없이 숫자 타입은 한개이다.
문자열 (string) 타입  
불리언 (boolean) 타입 논리적 참과 거짓
undefined 타입 초기화하지 않은 변수에 암묵적으로 할당되는 값
null 타입 값이 없다를 의도적으로 명시할 때 사용
심벌 (symbol) 타입 변경 불가능하다.
다른 값과 중복되지 않는 유일무의한 값
객체 타입 객체, 함수, 배열 등

 

 

(0) 데이터 타입은 왜 필요할까?

 자바스크립트 엔진은 값은 리터럴에 따라 타입을 해석하고 저장하기 위한 메모리 공간을 확보한다. 그 후 2진수로 변환하여 저장한다. 메모리 공간을 낭비 또는 손실 없이 저장하기 위해서 데이터 타입이 필요한 것이다. 

  • 값을 저장할 떄 확보해야하는 메모리 공간 크기를 결정하기 위해
  • 값을 참조할 때 읽어야 하는 메모리 크기를 알아내기 위해
  • 메모리에서 일어낸 2진수룰 무엇으로 해석해야 할지 결정하기 위해

 

이렇게 비유하면 조금 더 쉬울까?

 알고리즘을 공부하다보면 배낭 문제를 만나게 되는데, 최대 15kg까지만 담을 수 있는 가방에 몇달러의 가치를 지닌 물건을 얼만큼씩 담는게 좋을지 고민하는 내용이다. 데이터 타입은 이 문제와 비슷하게, 한정된 컴퓨터 메모리에 데이터를 낭비없이 값을 저장할지에 대한 고민이 들어가 있다.

 값을 재사용하기 위해서는 메모리에 저장하고 필요할 때 참조할 수 있어야 한다. 모든 값에 동일한 메모리 크기를 배정하게 된다면, 가방에 5kg씩 3개로 분할된 공간이 있다면, 물건 D는 1kg만 넣고 4kg 로 텅빈 공간이 되고, A는 담기지도 않는다.그럼 물건의 종류에 따라 무게를 배정해주면(A를 넣는다고 하면 12kg, D를 선택하면 1kg를 배정하는 방식), 가방에 낭비없이 담을 수 있다. 이 A와 D를 인식데이터 타입이다.

 

 

 

(1) 숫자 타입

 Javascript는 다른 언어와 달리 하나의 숫자타입을 제공하며, 모든 숫자는 실수로 저장된다. 

정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의 2진수로 저장된다. 하지만 데이터 타입은 숫자타입은 하나기에 값을 참조하면 10진수로 해석된다.

var binary = 0b1100011;   // 2진수
var octal   = 0o143;           // 8진수
var hex     = 0x63;             // 16진수

// 표기는 다르지만 모두 같은 값이다.
console.log(binary);          // 99
console.log(octal);            // 99
console.log(hex);              // 99
console.log(binary === hex);  // true
console.log(octal === hex);    // true

 

 

 모든 숫자타입은 부동소수점 형식으로 저장되기에,❗정수를 정수로 나누어도 실수가 나올 수 있다.

console.log(1 === 1.0);      // true

 

 

또한 숫자 타입은 실수 외에도 독특한 값을 (3가지) 표현 할 수 있다. (자바스크립트는 대소문자를 구별하기에, 정확한 철자와 대소문자 순서대로 적자. 그렇지 않으면 변수로 착각해 ReferenceError가 난다.)

  • Infinity : 양의 무한대
  • -Infinity : 음의 무한대
  • NaN : 산술 연산 불가 (not a number)
console.log(1 / 0);             // Infinity 
console.log(1 / -0);            // -Infinity 
console.log(1 * "떼굴펜");  // NaN

 

 

 

 

(2) 문자열 타입

 Javascript는 작은따옴표(''), 큰따옴표("") 또는 백틱(``)으로 텍스트를 감싸, 문자열을 표기한다. 문자열 타입은 원시타입이며, 변경 불가능한 값(immutable value)이다.

 

2-1) 템플릿 리터럴

 문자열 표기법 중 백틱(``)으로 감싸는, 템플릿 리터럴 방식은 ES6부터 도입되었다.

템플릿 리터럴을 이용한다면 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 사용할 수 있다. 

템플릿 리터럴은 런타임에 일반 문자열로 변환되어 처리된다.

 

템플릿 리터럴 예시

var text  = `<div>오늘도</div>
<div>떼굴떼굴</div>`;
var name = '떼굴펜';
var day = 18;

 // 떼굴펜 블로그, 오늘은 18일입니다. 
console.log(name + ' 블로그, 오늘은 ' + day + '일입니다.');  // 템플릿 리터럴 사용 안할 경우
console.log(`${name} 블로그, 오늘은 ${day}일입니다.`);  // 템플릿 리터럴 사용할 경우

 

(3) 불리언 타입

 논리적 참, 거짓을 나타내는 불리언 타입은 true, false 두종류의 값을 가질 수 있다.

 

(4) undefined 타입

undefined 타입의 값은 undefined 가 유일하다. 주로 변수에 값에 최초 할당이 이루어지기 전까지 변수에는 undefined 값이 할당되어 있다.

 

(5) null 타입

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

 

(6) Symbol 타입

변경 불가능하며, 다른 값과 중복되지 않는 유일무의한 값이다.주로 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.

 

(7) 객체 타입

원시 타입이 아니며 자바스크립트를 이루고 있는 많은 것들이 객체다..

 

'Book > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글

10장, 객체 리터럴  (1) 2024.04.19
9-2장, 단축 평가  (2) 2024.04.19
9-1장, 타입 변환  (0) 2024.04.19
5장, 표현식과 문  (0) 2024.04.18
4장, 변수  (0) 2024.04.17