공부하자

[Deep Dive 정리] 6장. 데이터 타입 본문

Javascript/Deep Dive

[Deep Dive 정리] 6장. 데이터 타입

dev_riley 2022. 10. 26. 00:06

자바스크립트는 7개의 데이터 타입을 제공한다. 이 데이터 타입은 원시 타입과 객체 타입으로 구별된다.

 

데이터 타입

6.1 숫자 타입

자바스크립트는 모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입이 별도로 존재하지 않는다.

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

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

6.2 문자열 타입

문자열 타입은 텍스트 데이터를 나타내는 데 사용한다.

보통 따옴표(주로 작은 따옴표)로 문자열을 감싸는 데 이는 키워드나 식별자 같은 토큰과 구분하기 위해서이다.

 

6.3 템플릿 리터럴

ES6부터 템플릿 리터럴이라고 하는 새로운 문자열 표기법이 도입되었다.

템플릿 리터럴은 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공한다.

일반 문자열과 달리 따옴표를 이용하지 않고 백틱(``)을 사용한다.

 

[멀티라인 리터럴]

일반 문자열은 개행(줄바꿈)이 허용되지 않는다. 그래서 주로 이스케이프 시퀀스를 사용하는데 템플릿 리터럴을 사용하면 굳이 이스케이프 시퀀스를 사용하지 않아도 된다.

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

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

출력 결과는 다음과 같다.

<ul>
    <li><a href="#">Home</a></li>
</ul>

‼️ 이스케이프 시퀀스 !!

이스케이프 시퀀스

 

[표현식 삽입]

문자열은 문자열 연산자 +를 사용해 연결할 수 있다.

템플릿 리터럴 내에서는 표현식 사입을 통해 간단히 문자열을 삽입할 수 있다.

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

// ES5 : 일반 문자열 연결
console.log('My name is ' + first + ' ' + last + '.');
// ES6 : 표현식 삽입
console.log(`My name is ${first} ${last}.`);

//출력값 :My name is Unm-mo Lee.

 

6.4 Boolean 타입

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

 

6.5 undefined 타입

undefined 타입의 값은 undefined가 유일하다.

var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화된다. 그래서 변수를 참조했을 때, undefined가 반환된다면 선언 이후 값이 할당한 적이 없다는 변수라는 것을 알 수 있다. 하지만 개발자가 의도적으로 값이 없다는 의미에서 undefined를 변수에 할당한다면, 본래의 취지에 어긋나기도 하고 혼란을 야기할 수 있다. 그래서 값이 없다는 의미를 명시하고 싶을 때는 null을 쓰면 된다.

 

6.6 null 타입

null 타입의 값은 null이 유일하다. 자바스크립트는 대소문자를 구별하므로 Null, NULL 등과 다르다.

프로그래밍 언어에서 null은 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재)할 때 사용한다.

 

6.7 심벌(symbol)타입

심벌은 ES6에서 추가된 7번째 타입으로, 변경 불가능한 원시 타입의 값이다.

심벌 값은 다른 값과 중복되지 않는 유일무이한 값이다.

 

6.8 객체 타입

자바스크립트는 객체 기반의 언어이고, 위의 7개의 타입을 제외하고는 전부 객체 타입이다.

 

6.9 데이터 타입이 필요한 이유

  • 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
  • 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
  • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해

 

6.10 동적 타이핑

[정적 타입 언어]

C, C++, JAVA, Kotlin, Go, Rust 등이 있다.

정적 타입 언어는 변수를 선언할 때, 변수에 할당할 수 있는 데이터 타입을 사전에 선언해야 한다.

컴파일 시점에 타입체크(선언한 데이터 타입에 맞는 값을 할당했는지 검사하는 처리)를 수행하는데, 이를 통과하지 못하면 에러를 발생시키고 프로그램의 실행 자체를 막는다.

 

[동적 타입 언어]

이를 통해 타입의 일관성을 강제함으로써 더욱 안정적인 코드의 구현을 통해 런타임에 발생하는 에러를 줄인다.

Javascript, Python, PHP, Ruby 등이 있다.

동적 타입 언어는 변수를 선언할 때 미리 타입을 선언하지 않는다.

선언이 아닌 할당에 의해 타입이 결정(타입 추론)이 된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.

 

 

 

 

Comments