[ 딥다이브 #6-1 ] 데이터 타입

비트·2023년 11월 1일
0

JavaScript

목록 보기
18/22
post-thumbnail
post-custom-banner

📁 오늘 공부한 내용.

오늘 읽은 범위 : 6장 데이터 타입 (59p ~ 73p)
날짜 : 2023.10.31 ~ 11.1

📂 목차

1. 숫자 타입
2. 문자열 타입
3. 템플릿 리터럴
3-1. 멀티라인 문자열
3-2. 표현식 삽입
4. 불리언 타입
5. undefined 타입


데이터 타입

데이터 타입은 (줄여서 타입이라고도 한다.) 값의 종류를 말한다.
7개의 데이터 타입을 제공하며, 원시 타입객체 타입으로 분류할 수 있다.

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

숫자 타입

ECMAScript 사양에 따르면 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다.

  • 즉, 모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입이 별도로 존재하지 않는다.
// 모두 숫자 타입이다.
var integer = 10; // 정수
var double = 10.12; // 실수
var negative = -20; // 음의 정수

정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의 2진수로 저장된다.

  • 자바스크립트는 이를 표현하기 위한 데이터 타입을 제공하지 않기 때문에 이들 값을 참조하면 모두 10진수로 해석된다.
var binary = 0b0100001; // 2진수
var octal = 0o101; // 8진수
var hex = 0x41;

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

// 숫자 타입은 모두 실수로 처리된다.
console.log(1 === 1.0); // true 
console.log(4 / 2); // 2
console.log(3 / 2); // 1.5

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

  • Infinity : 양의 무한대
  • -Infinity : 음의 무한대
  • NaN : 산술 연산 불가 (not-a-number)
// 숫자 타입의 세 가지 특별 값
console.log(10 / 0); // Infinity
console.log(10 / -0); // -Infinity
console.log(1 * 'String'); // NaN
// -> NAN, Nan, nan은 값이 아닌 식별자로 해석하니 주의!

문자열 타입

텍스트 데이터를 나타내는 데 사용한다.

  • 문자열은 0개 이상의 16비트 유니코드 문자 (UTF-16)의 집합으로 전 세계 대부분의 문자를 표현할 수 있다.
  • 문자열은 작은따옴표 (''), 큰따옴표("") 또는 백틱(``)으로 감싼다.
    • 자바스크립트에서 가장 일반적인 표기법은 작은따옴표를 사용하는 것이다.
// 문자열 타입
var string;
string = '문자열'; // 작은따옴표
string = "문자열"; // 큰따옴표
string = `문자열`; // 백틱 (ES6)
string = '작은따옴표로 감싼 문자열 내의 "큰따움표"는 문자열로 인식된다.';
string = "큰따옴표로 감싼 문자열 내의 '작은따옴표'는 문자열로 인식된다.";

// 따옴표로 감싸지 않은 hello를 식별자로 인식한다.
var string = hello; // ReferenceError: hello is not defined

만약 문자열을 따옴표로 감싸지 않으면 자바스크립트 엔진은 키워드나 식별자 같은 토큰으로 인식한다.

그리고 만약 따옴표로 문자열을 감싸지 않는다면 스페이스와 같은 공백 문자도 포함시킬 수 없다.

  • C언어는 문자열 타입을 제공하지 않고 문자의 배열로 문자열을 표현하고,
  • 자바는 문자열을 객체로 표현한다.
  • 그러나 자바스크립트의 문자열은 원시형 타입이며, 분변 가능한 값이다.
    • 이것은 문자열이 생성되면 그 문자열을 변경할 수 없다는 것을 의미한다.

템플릿 리터럴

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

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

  • 템플릿 리터럴은 런타임에 일반 문자열로 변환되어 처리된다.
  • 템플릿 리터럴은 일반 문자열과 비슷해 보이지만 백틱(``)을 사용해 표현한다.
var template = `Template literal`;
console.log(template); // Template literal

멀티라인 문자열

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

// 일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않는다.
var str = 'Hello
world.';
// syntaxError: Invalid or unexpected token

// 줄바꿈과 들여쓰기가 적용된 HTML 문자열은 다음과 같이 이스케이프 시퀀스를 작성한다.
var template1 = '<ul>\n\t<li><a href="#">Home</a></li>\n</ul>'

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

console.log(template1);
console.log(template2);

template1, template2 동일한 값이 출력된다.

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

표현식 삽입

템플릿 리터럴 내에서는 표현식 삽입을 통해 간단히 문자열을 삽입할 수 있다. 이를 통해 문자열 연산자보다 가독성 좋고 간편하게 문자열을 조합할 수 있다.

표현식을 삽입하려면 ${ }으로 표현식을 감싼다.

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

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

표현식의 결과가 문자열이 아니더라도 문자열로 타입이 강제로 변환된다.

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

불리언 타입

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

불리언 타입의 값은 참과 거짓으로 구분되는 조건에 의해 프로그램의 흐름을 제어하는 조건문에서 자주 사용한다.

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

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

undefined 타입

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

var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화 된다.

  • 변수 선언에 의해 확보된 메모리 공간을 처음 할당이 이뤄질 때까지 빈 상태 (대부분 비어 있지 않고 쓰레기 값 garbage value이 들어있다.)로 내버려두지 않고 자바스크립트 엔진이 undefined로 초기화한다.
  • 따라서 변수를 선언한 이후 값을 할당하지 않은 변수를 참조하면 undefined가 반환된다.
var foo;
console.log(foo); // undefined

undefined를 직역하면 "정의되지 않은"이다.

일반적으로 정의란 개념은 어떤 대상을 명확하게 규정하는 것을 의미한다.

  • 자바스크립트의 undefined에서 말하는 정의란 변수에 값을 할당하여 변수의 실체를 명확히 하는 것을 말한다.
  • 자바스크립트의 경우 변수를 선언하면 암묵적으로 정의가 이뤄지기 때문에 선언과 정의의 구분이 모호하다.
    • ESMAScript 사양에서 변수는 '선언한다'라고 표현하고, 함수는 '정의한다'라고 표현한다.

profile
Drop the Bit!
post-custom-banner

0개의 댓글