JavaScript 데이터 타입

최기환·2023년 4월 9일
0

Javascript

목록 보기
3/7

데이터 타입

기본적으로 원시타입과 객체타입으로 분류할 수 있다.

  • 원시타입
    • 숫자 타입: 정수와 실수 구분없이 하나의 숫자 타입만 존재
    • 문자열 타입: 문자열
    • 불리언 타입: 논리적 참(true)과 거짓(false)
    • undefined 타입: var 키워드로 선언된 변수에 암묵적으로 할당되는 값
    • null타입: 값이 없다는것을 의도적으로 명시할 때 사용하는 값
    • 심벌 타입: ES6에 추가된 7번째 타입 유니크한 값을 가짐
  • 객체 타입: 객체, 함수, 배열 등

숫자 타입

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

자바스크립트는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문에 이들 값을 참조하면 모두 10진수로 해석한다.

var binary = =b1000001; // 2진수
var octal = 0o101; // 8진수
var hex = 0x41; // 16진수

// 표기법만 드를 뿐 모두 같은 값이다.
console.log(binary); // 65
console.log(octal); // 65
console.log(hex); // 65

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

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

문자열 타입

문자열은 0개 이상의 16비트 유니코드 문자(UTF-16)의 집합으로 전 세계 대부분의 문자를 표현할 수 있다.

문자열은 작은따옴표, 큰따옴표 또는 백틱(``)으로 텍스트를 감싼다.

C는 문자열을 문자의 배열로 표현하고, 자바는 문자열을 객체로 표현한다. 그리고 자바스크립트의 문자열은 원시 타입이며, 변경 불가능한 값이다. 이것은 무자열이 생성되면 그 문자열을 변경할 수 없다는 것을 의미한다.

템플릿 리터럴

ES6부터 템플릿 리터럴이라고 하는 새로운 문자열 표기법이 도입되었다. 템플릿 리터럴은 멀티라인 문자열, 표현식 삽입, 태그드 템플릿등 편리한 문자열 처리 기능을 제공한다.

템플릿 리터럴은 백틱(``)을 사용해 표현한다.

멀티라인 문자열

일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않는다.

따라서 일반 문자열 내에서 줄바꿈 등의 공백을 표현하려면 백슬래시()로 시작하는 이스케이프 시퀀스를 사용해야 한다.
ex) \n, \b, \r, \t 등등

라인 피드와 캐리지 리턴
개행 문자는 텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열이다. 개행 문자에는 라인 피드와 캐리지 리턴이 있다. 이는 과거 타자기에서 커서를 제어하는 방식에서 비롯 되었다. 라인 피드(\n)는 커서를 정지한 상태에서 종이를 한줄 올리는것이고 캐리지 리턴(\r)은 종이를 움직이지 않고 커서를 맨 앞줄로 이동하는 것이다.

일반 문자열과 달리 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되며, 모든 공백도 있는 그대로 적용된다.

var template = `<ul>
	<li><a href="#">Home</a></li>
<ul>`;

표현식 삽입

템플릿 리터럴을 이용하면 문자열내에 간단하게 표현식을 삽입할 수 있다.

var first = 'Ung-mo'
var last = 'Lee';

console.log(`My name is ${first} ${last}.`);

불리언 타입

불리언 타입의 값은 true와 false 뿐이다.

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

undefined타입

var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화 된다. 즉 개발자가 의도한 값이 아닌 엔진이 암묵적으로 할당한 값이라는 것이다. 그래서 의도적으로 변수에 값이 없다는 것을 명시하고 싶을때는 undefined가 아닌 null값을 할당하는것이 바람직하다.

null 타입

null은 변수에 걊이 없다는것을 의도적으로 명시할 때 사용한다. 함수가 유효한 값을 반환할 수 없는 경우 null을 반환하기도 한다.

심벌타입

ES6에 추가된 7번째 타입으로, 변경불가능한 원시 타입의 값이다. 다른 값과 중복되지 않는 유일무이한 값이다. 따라서 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.

심벌은 Symbol함수를 호출해 생성한다. 생성된 심벌값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 유일무이한 값이다.

var key = Symbol('key');

var obj = {};

obj[key] = {};

객체 타입

객체 타입은 원시 타입과 근본적으로 다르다. 이후에 알아보긴 하겠지만 중요한 것은 자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든 것이 객체라는 것이다.

데이터 타입의 필요성

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

데이터 타입에 따라 확보하는 메모리 공간의 크기가 결정된다.

데이터 타입에 의한 값의 해석

2진수 0100 0001을 숫자로 해석하면 65지만 문자열로 해석하면 'A'다. 이러한 문제를 해결하기 위해 데이터 타입이 필요하다.

동적 타이핑

C나 자바같은 정적 타입 언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류를 사전에 입력해야 한다. 이를 명시적 타입 선언이라 한다. 정적 타입 언어는 컴파일 시점에 타입 체크를 수행한다.

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

동적 타입 언어는 편리하다. 하지만 구조적인 단점이 있다. 변수 값이 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서 변화하는 변수 값을 추적하기 어려울 수 있다. 유연성은 높지만 신뢰성은 떨어진다. 하지만 타입스크립트의 등장으로 이러한 문제는 해결되었다.

profile
프론트엔드 개발자를 꿈꾸는 취준생(백수) 입니다!

0개의 댓글