Data Type :: 값의 종류를 나타내는 데이터 타입

이주희·2022년 11월 1일
0

JavaScript

목록 보기
38/49

1. 데이터 타입의 필요성

1-1. 값을 저장할 때 확보해야 하는 메모리 공간의 크기 결정

  • 메모리에 값을 저장하려면 먼저 확보해야 할 메모리 공간의 크기를 결정해야 한다.

  • 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다.

1-2. 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기 결정

  • 값을 참조할 때에도, 한번에 읽어 들여야 할 메모리 공간의 크기, 즉 메모리 셀의 개수(바이트 수)를 알아야 한다.
    (값을 참조할 때에는, 식별자를 통해 값이 저장되어 있는 메모리 공간의 선두 메모리 셀의 주소를 찾아간다.)

  • 컴파일러 또는 인터프리터는 심벌 테이블이라고 부르는 자료 구조를 통해 식별자를 키로 바인딩된 값의 메모리 주소, 데이터 타입, 스코프 등을 관리한다.

1-3. 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정

  • 모든 값은 2진수, 즉 비트의 나열로 저장된다.
  • 값은 데이터 타입에 따라 다르게 해석될 수 있다.

2. 동적 타이핑

dynamic typing

2-1. 정적 타입 언어

static/strong type

  • 명시적 타입 선언 explict type declaration
    정적 타입 언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야 한다.

2-2. 동적 타입 언어

dynamic/weak type

  • 자바스크립트의 변수는 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.

  • 선언이 아닌 할당에 의해 타입이 결정(타입 추론: type inference)된다.

  • 재할당에 의해 변수 타입은 언제든지 동적으로 변할 수 있다. (동적 타이핑)


3. 데이터 타입 종류

3-1. 숫자 타입

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

  • 모든 수를 실수로 처리한다.

  • 추가적으로 아래의 세 가지 특별한 값도 표현할 수 있다.

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

3-2. 문자열 타입

  • 0개 이상의 16비트 유니코드 문자(UTF-16)의 집합으로 전 세계 대부분의 문자를 표현할 수 있다.
  • 자바스크립트의 문자열은 원시 타입이며, 변경 불가능한 값이다.

3-2-1. 템플릿 리터럴

  • ES6에 도입된 새로운 문자열 표기법으로, 런타임에 일반 문자열로 변환되어 처리된다.

멀티라인 문자열

  • 줄바꿈이 허용되며 공백도 있는 그대로 적용된다.
  • 일반 문자열은 개행이 허용되지 않는다.

표현식 삽입

  • 템플릿 리터럴 내에 표현식 삽입을 통해 간단히 문자열을 삽입할 수 있다.
  • 표현식을 삽입하려면 ${}로 표현식을 감싼다.
  • 표현식의 평가 결과가 문자열이 아니더라도 문자열로 타입이 강제로 변환되어 삽입된다.

3-3. 불리언 타입

  • true
  • false

3-4. undefined 타입

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

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

  • 변수를 참조했을 때 undefined가 반환된다면,
    참조한 변수가 선언 이후 값이 할당된 적이 없는, 즉 초기화되지 않는 변수라는 것을 알 수 있다.


3-5. null 타입

  • 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미다.

  • 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미한다.

  • 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한다.

    document.querySelector 메서드는 조건에 부합하는 HTML 요소를 검색할 수 없는 경우 에러 대신 null을 반환한다.


3-6. 심벌 타입

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

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

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

  • Symbol 함수를 호출해 생성한다. (심벌 이외의 원시 값은 리터럴을 통해 생성한다.)

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


3-7. 객체 타입

  • 원시 타입과 객체 타입은 근본적으로 다르다!

  • 자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든 것이 객체이다.


3-8. BigInt 타입

  • ECMAScript2020(ES11)에서 새로운 원시값으로 추가되었다.

  • 숫자값을 안정적으로 나타낼 수 있는 최대치인 2^13-1보다 큰 정수를 표현할 수 있는 새로운 원시값이다.

BigInt 값 생성하는 방법

// 1. 정수 리터럴의 뒤에 n을 붙인다.
10n

//2. BigInt 함수를 호출한다.
BigInt(10)
profile
🍓e-juhee.tistory.com 👈🏻 이사중

0개의 댓글