본문 바로가기

Javascript

[모던 자바스크립트 Deep Dive] 03. 데이터 타입

데이터타입

데이터타입 : 값의 종류

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

 

숫자 타입

자바스크립트는 모든 수를 실수로 처리한다

추가적인 세 가지 특별한 값

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

 

문자열 타입

문자열 타입 : 텍스트 데이터를 나타내는 데 사용

문자열은 작은따옴표, 큰따옴표, 백틱으로 텍스트를 감싼다

string1 = '작은따옴표로 감싼 문자열 내의 "큰따옴표"는 문자열로 인식된다";
string2 = "큰따옴표로 감싼 문자열 내의 '작은따옴표'는 문자열로 인식된다";

자바스크립트의 문자열은 원시타입이며 변경 불가능한 값

 

템플릿 리터럴

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

템플릿 리터럴은 런타임에 일반 문자열로 변환되어 처리

백틱(``)을 사용해 표현

멀티라인 문자열

일반 문자열 내에서는 줄바꿈 (개행)이 허용되지 않음 → 줄바꿈 등의 공백을 표현하려면 백슬래시로 시작하는 이스케이프 시퀀스 사용

템플릿 리터럴 내에서는 줄바꿈 및 공백이 있는 그대로 적용

var template = `<ul>
	<li><a href="#">Home</a></li>
</ul>;
console.log(template);

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

 

표현식 삽입

문자열 연산자 + 를 사용해 문자열을 연결할 수 있지만 템플릿 리터럴에서는 표현식 삽입을 통해 간단히 문자열 삽입 가능

var first = "E";
var last = "chichi";

// 문자열 연결
console.log("My name is " + first + " " + last + "."); // My name is Echichi.

// 표현식 삽입
console.log(`My name is ${first} ${last}.`); // My name is Echichi.

 

불리언 타입

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

 

undefined 타입

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

var로 선언한 변수에 첫 할당이 이루어질 때까지 빈 상태 (대부분 비워져있지 않고 쓰레기 값이 있음) 로 두지 않고 undefined 로 초기화

undefined 는 개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값

변수에 값이 없다는 것을 명시하고 싶을 때는 undefined가 아닌 null을 할당

 

null 타입

null 타입의 값은 null 이 유일하다

변수에 값이 없다는 것을 의도적으로 명시 (의도적 부재)할 때 사용

변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미 (이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미)

함수가 유용한 값을 반환할 수 없는 경우 명시적으로 null 반환

<!DOCTYPE html>
<html>
  <body>
    <script>
      var element = document.querySelector(".echichiClass");

      // HTML 문서에 echichiClass 클래스를 갖는 요소가 없다면 null을 반환
      console.log(element); // null
    </script>
  </body>
</html>

 

심벌 타입

변경 불가능한 원시 타입의 값

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

충돌할 위험이 없는 객체의 유일하 프로퍼티 키를 만들기 위해 사용

var key = Symbol('key');
console.log(typeof key);  // symbol

// 객체 생성
var myObj = {};

// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 "프로퍼티 키"로 사용
myObj[key] = 'value';
console.log(obj[key]);  // value

 

객체 타입

자바스크립트를 이루고 있는 거의 모든 것이 객체

 

데이터 타입의 필요성

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

 

동적 타이핑

정적 타입 언어

  • 변수를 선언할 때 할당할 수 있는 데이터 타입을 사전에 선언해야함 (명시적 타입 선언)
  • 컴파일 시점에 타입 체크를 수행

동적 타입 언어

  • 변수를 선언할 때 할당할 수 있는 데이터 타입을 사전에 선언하지 않음
  • 변수에 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 자유롭게 타입 변경 가능

동적 타이핑

  • 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입 결정 (타입 추론)
  • 재할당에 의해 변수의 타입은 언제든지 변할 수 있음
  • 할당된 값에 의해 변수의 타입이 동적으로 결정됨