모던 자바스크립트 Deep Dive - 6장 데이터 타입

밀루·2023년 10월 5일
0

데이터 타입(data type)은 값의 종류를 말한다. 자바스크립트의 데이터 타입은 원시 타입객체 타입으로 분류할 수 있다.

원시타입

  • 숫자, 문자열, 불리언, undefined, null, 심벌 타입

객체 타입

  • 객체, 함수, 배열 등

그럼 자바스크립트가 제공하는 데이터 타입의 특징을 살펴보자

숫자 타입

  • 하나의 숫자 타입만 존재
  • 모든 수를 실수로 처리
  • 모두 10진수로 해석 (2진수, 8진수, 16진수를 표현하기 위한 데이터 타입 없음)

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

  • Infinity : 양의 무한대
  • -Infinity : 음의 무한대
  • NaN : 산술 연산 불가 (not a number)
    (+ 대소문자를 구분하므로 NaN으로 표기해야함, nan 등등은 xx)

문자열 타입

문자열 타입은 텍스트 데이터를 나타내는데 사용된다. 작은따옴표(''), 큰따옴표(""), 백틱(``)으로 텍스트를 감싼다.

자바스크립트 문자열은 원시 타입이며 변결 불가능한 값이다. 이는 문자열이 생성되면 변경할 수 없다는 것을 의미한다. (관련해서는 11장 참고)


템플릿 리터럴

템플릿 리터럴은 백틱(``)을 사용해 표현하는 것으로 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공한다. 이는 런타임에 일반 문자열로 변환되어 처리된다.

멀티라인 문자열

// 일반 문자열에서 개행하려면 이스케이프 시퀀스를 이용해야하지만
console.log("hello\nwordl");

// 템플릿 리터럴은 이스케이프 시퀀스 없이도 개행할 수 있다
console.log(`hello
world`);

표현식 삽입

// 템플릿 리터럴 내에서는 표현식 삽입을 통해 문자열을 삽입할 수 있다
var first = "hi";

console.log(`hoho.. ${first}`); //ES6

불리언 타입

  • 논리적 참 : true
  • 논리적 거짓 : false

undefined 타입

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

자바스크립트 엔진변수 선언에 의해 확보된 메모리 공간에 처음 할당이 이루어지지 않았다면 undefined로 초기화한다. 때문에 아래와 같이 개발자가 의도적으로 undefined를 할당하면 혼란을 줄 수 있으므로 권장하지 않는다.

var foo = undefined; (XXXXXXX!!!!)
var hoo = null; (OOOOOOOO ^O^)

null 타입

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

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


심벌 타입

ES6에 추가된 타입으로, 변경 불가능한 원시 타입의 값이다.

심벌은 Symbol 함수를 호출해 생성하는데, 이때 생성된 값은 외부에 노출되지 않고 중복되지 않는 유일무이한 값이다. 더 자세하게 알아보기(7장)


객체 타입

11장


데이터 타입의 필요성

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

동적 타이핑

C 등과 같은 정적 타입 언어는 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있다. 때문에 컴파일 시점에 타입 체크를 수행하고 통과하지 못했다면 에러를 발생시킨다.

그러나 자바스크립트는 변수를 선언할 때 타입을 선언하지 않고 var, let, const 키워드를 사용해 변수를 선언한다. 또한, 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.

즉, 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입 추론)된며 재할당에 의해 변수의 타입은 언제든지 동적을 변할 수 있는 동적 타이핑이라는 특징을 가지고 있다.

그렇다면 변수는 타입을 가질까? 답은 NO.

하지만 값은 타입을 가지므로, 변수에 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정되는 것이다.

변수를 사용할 때 주의사항

  • 변수는 꼭 필요한 경우에 한해 제한적으로 사용하기
    (자바스크립트 엔진에 의해 암묵적으로 타입이 변환되기도 하니까... 유연성은 높지만 신뢰성은 낮은 동적 타입 언어!)
  • 변수의 유효 범위(스코프)는 최대한 좁게 만들어 변수의 부작용을 억제하기
  • 전역 변수는 최대한 사용하지 않기
  • 변수보다는 상수를 사용해 값의 변경을 억제하기
  • 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍하기


자바스크립트 타입에 대해 알 수 있어서 좋았다. 책이 술술 읽혀서 좋은 것 같다.

profile
이밀루의 도전

0개의 댓글