javascript Deep Dive

Chap.06 데이터 타입

이경찬 :) 2023. 8. 1. 10:09

숫자 타입

javascript에서는 숫자타입의 값은 64비트 부동소수점 형식을 따른다. 즉, 모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입이 별도로 존재하지 않는다.

 

// 모두 숫자 타입이다.
var integer = 10; // 정수
var double = 10.12; // 실수
var negative = -20; // 음의 정수

숫자 타입은 추가적으로 세 가지 특별한 값도 표현할 수 있다.

- Infinity : 양의 무한대

- -Infinity : 음의 무한대

- NaN : 산술 연산 불가(not-a-number)

 

문자열 타입

문자열 타입은 텍스트 데이터를 나타내는 데 사용한다. 문자열은 0개 이상의 16비트 유니코드 문자의 집합으로 전 세계 대부분의 문자를 표현할 수 있다.

// 문자열 타입
var string;
string = '문자열'; // 작은따옴표
string = "문자열"; // 큰 따옴표
string = `문자열`; // 백틱(ES6)

 

템플릿 리터럴

템플릿 리터럴은 일반 문자열과 비슷해 보이지만 작은따옴표(' ') 또는 큰 따옴표 (" ")같은 일반적인 따옴표 대신 백틱(` `)을 사용해 표현한다.

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

불리언 타입

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

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

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

데이터 타입의 필요성

var score = 100;

위 코드가 실행되면 컴퓨터는 숫자 값 100을 저장하기 위해 메모리 공간을 확보한 다음, 확보된 메모리에 숫자 값 100을 2진수로 저장한다. 이러한 처리를 하려면 숫자 값을 저장할 때 확보해야 할 메모리 공간의 크기를 알아야 한다. 자바스크립트 엔진은 데이터 타입,즉 값의 종류에 따라 정해진 크기의 메모리 공간을 확보한다. 즉, 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다.

 

동적 타이핑

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

C나 자바 같은 정적 타입언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야 한다. 이를 명시적 타입 선언이라 한다. 다음은 C에서 정수 타입 변수를 선언하는 예다.

// C 변수에는 1바이트 정수 타입의 값(-128 ~ 127 )만 할당할 수 있다.
char c;

// num 변수에는 4바이트 정수 타입의 값만 할당 할 수 있다.
int num;

정적 타입 언어는 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있다.

정적 타입 언어는 타입체크(선언한 데이터 타입에 맞는 값을 할당했는지 검사하는 처리)를 수행한다.

 

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

 

typeof 연산자로 변수의 데이터 타입을 조사해 보도록 하겠다.

 

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

자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 동적 타이핑이라 하며, 자바스크립트를 정적 타입 언어와 구별하기 위해 동적 타입언어라 한다.

 

동적 타입 언어는 변수에 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있다. 이러한 동적 타입 언어의 특징은 데이터 타입에 대해 무감각해질 정도록 편리하다는 것이다. 하지만 언제나 그렇듯 편리함의 이면에는 위험도 도사리고 있다.

 

변수 값은 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서는 변화하는 변수 값을 추적하기 어려울 수 있다. 그뿐만 아니라 변수의 타입이 고정되어 있지 않고 동적으로 변하는 동적 타입 언어의 변수는 값의 변경에 의해 타입도 언제든지 변경될 수 있다. 따라서 동적 타입 언어의 변수는 값을 확인하기 전에는 확신할 수 없다.