[07.11] 데이터 타입

2024. 7. 12. 20:39WebFront/JS, JQuery

데이터 타입이란?

데이터 타입은 값의 종류를 말한다. JS는 7개의 데이터 타입을 제공한다. 

숫자타입 숫자, 정수, 실수 
문자열타입 문자열
불리언타입 true, false
undefined타입 var 키워드에 선언된 변수에 암묵적으로 할당되는 값
null타입 값이 없음을 명시할 때 사용
심벌타입 ES6에 추가
객체타입 객체, 함수, 배열

 

숫자 타입

C나 자바와 달리 JS에서는 하나의 숫자 타입만 존재한다. 자바에서는 숫자 타입에 따라서 메모리가 달리 배정되지만(자바의 정석 기초, p.57), 64비트 부동소수점 형식의 2진수 * 로 저장된다. 

 

*52비트는 숫자를 저장하는데 사용되고 11비트는 소수점 위치를, 1비트는 음수와 양수를 표기하는데 사용한다.

 

정수로 표시되는 숫자도 사실은 실수이고, 정수로 표시되는 수끼리 나누더라도 실수가 나올 수 있다. 

console.log(1 === 1.0);

 

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

-양의 무한대:Infinity

-음의 무한대:-Infinity

-산술 연산 불가:NaN 

 

문자열 타입

문자열은 작은 따옴표(' '), 큰따옴표(" "), 백틱(` `)으로 텍스트를 감싼다. 작은따옴표로 감싼 문자열 내의 큰따옴표, 큰따옴표로 감싼 문자열 내의 작은따옴표는 문자열로 인식된다. 

 

템플릿 리터럴

ES6부터 도입된 표기법이다. 일반 문자열에서는 제공되지 않는 다양한 특징이 있다. 

 

1. 줄바꿈이 허용된다. 

let str = `Hello
world.`;

 

2. 백슬래시(\)로 시작하는 이스케이프 시퀀스를 사용할 필요가 없다. 

ex) \n 다음행으로 이동 \t 탭 등

//일반 문자열
let template = '<ul>\n\t<li><a href="#">Home</a></li>\n</ul>';

//템플릿 리터럴
let template = `<ul>
		   <li><a href="#">Home</a></li>
		</ul>`;

훨씬 더 직관적이다. 템플릿 리터럴 내에서는 줄바꿈, 공백이 그대로 적용된다. 

 

표현식 삽입

문자열은 +를 사용해 연결할 수 있다. 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다. 그 외에는 덧셈 연산자로 동작한다. 템플릿 리터럴 내에서는 표현식 삽입이 가능하다. 

let first = 'Kim';
let last = 'Ye Chan';
console.log('My name is ' + first + ' ' + last + '.');

//ES6부터(백틱 사용)
console.log(`My name is ${first} ${last}.`);

 

표현식을 삽입하는 것도 가능하다. 

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

불리언 타입

논리적 참과 거짓을 나타내는 true와 false뿐만 가지고 있다. 

 

underfined 타입

var로 선언한 변수는 암묵적으로 undefined로 초기화된다. 처음 할당될 때에 쓰레기 값이 들어 있는 것을 방지하기 위함이다. 만약, 변수를 참조했을 때에 undefined가 반환되면 초기화가 되지 않았다는 것을 알 수 있다. 

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

 

값이 없다를 명시하고 싶으면 null을 할당하면 된다. 

*참고로 var, let, const모두 undefined로 초기화가 가능하지만, const는 선언과 동시에 초기화를 해야한다. 

null타입 

null은 null이 유일하다. 대소문자를 구별하므로 주의해야한다. 값이 없음을 의도적으로 명시할 때 사용한다. 이전에 할당되어 있던 값을 명시적으로 제거하는 것이 가능하다. 함수가 유효한 값을 반환할 수 없는 경우에도 null을 반환한다. 

 

심벌 타입

ES6에서 추가된 타입으로 다른 값과 중복되지 않는 유일무이한 값이다. 주로 충돌 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다. 심벌은 Symbol함수를 호출해 생성한다. 

let key = Symbol('key');
console.log(typeof key);

var obj = {};

obj[key] = 'value';
console.log(obj[key]);

객체 타입

앞의 6가지 데이터 타입 이외의 값은 모두 객체 타입이다. 

 

데이터 타입의 필요성

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

1. 메모리에 값을 저장하기 전에 메모리 공간의 크기를 결정하기 위해서다.  

2. 값을 참조할 때 한 번에 읽어야 할 메모리 공간의 크기를 결정하기 위해서다. 

3. 메모리에 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해서다. 

동적 타이핑

C나 자바는 변수에 값을 할당하기 전에 데이터 타입을 사전에 선언해야한다. (명시적 타입 선언). 데이터 타입에 맞는 값을 할당하지 못하면 프로그램 실행 자체가 막힌다. 하지만 JS는 변수를 선언할 때 타입을 선언하지 않는다. 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

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

 

JS에서 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 언제든지 동적으로 변할 수 있다. 이를 동적 타입이라고 한다. 

 

 

'WebFront > JS, JQuery' 카테고리의 다른 글

[07.12] 연산자  (0) 2024.07.13