데이터 타입

이다은·2023년 2월 21일
0
post-thumbnail

🥸 자바스크립트의 데이터 타입은 크게 두가지로 기본형(원시형, primitive type)참조형(reference type)이 있습니다. 나뉘는 기준은 복제를 할 때, 기본형은 값이 담긴 주솟값을 바로 복제하는 반면 참조형은 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제한다는 점이 다릅니다.

데이터 타입이 필요한 이유

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

기본형(원시형, primitive type)

  • 숫자
  • 문자
  • 참/거짓
  • null
  • undefined
  • Bigint
  • 심볼(ES6 추가)

참조형(reference type): 기본형이 아닌 모든 것

  • 객체
  • 배열
  • 함수
  • 날짜
  • 정규표현식 등
  • map, set(ES6 추가)

기본형(원시형, primitive type)

1. 숫자(Number)

모든 숫자를 64비트 부동 소수점 형태로 저장하기 때문에 정수나 실수의 구분 없이 변수에 바로 값을 대입할 수 있습니다. 모든 숫자를 실수로 처리하기 때문에 나누기 연산을 할 경우 소수점까지 출력되므로 주의하여야 합니다.

const num = 3/2;

console.log(number); // 1.5
// 숫자 타입의 세 가지 특별한 값
console.log(10 / 0); // Infinity
console.log(10 / -0); // -Infinity
console.log(1 * "H"); // NaN

🔥 자바스크립트는 대소문자를 구별하기 때문에 NaNNAN, Nan, nan 등으로 표현할 경우 에러가 발생합니다. 해당 NAN, Nan, nan은 자바스크립트 엔진에서 식별자로 해석됩니다.

2. 문자(String)

16비트 부호 없는 정수 값 "요소"로 구성된 집합으로, 각각의 요소가 String의 한 자리를 차지합니다. String의 길이는 그 안의 요소 수와 같습니다. JavaScript 문자열은 불변하기 때문에, 문자열을 생성한 후 바꾸는 것은 불가능합니다. 그러나 원본 문자열을 사용해 새로운 문자열을 생성하는 것은 가능합니다.

let str = "hi";

str[0] = "H";
console.log(str); // "hi"
  
str = "HI";
console.log(str); // "HI"

3. 참/거짓(Boolean)

논리 요소를 나타내며 truefalse 두 가지의 값을 가질 수 있습니다.

const a = 1 > 2;
const b = 1 < 2;

console.log(a); // false
console.log(b); // true

4. Null

일반적으로 존재하지 않거나 유효하지 않은 object 또는 주소를 의도적으로 가리키는 참조를 나타냅니다. 자바스크립트에서 null은 동작이 원시적으로 보이기 때문에 primitive values 중 하나로 표시됩니다. 하지만 typeof 연산자를 사용할 때는 object를 반환합니다. Null 타입은 null 하나의 값만 가질 수 있습니다.

console.log(typeof null); // "object"

5. Undefined

선언한 후 값을 할당하지 않은 변수 혹은 값이 주어지지 않은 인수에 자동으로 할당됩니다. 자바스크립트에서의 undefined는 타입이면서 값을 나타냅니다.

let a;

console.log(typeof a); // "undefined"
console.log(a) // undefined

6. BigInt

임의 정밀도로 정수를 나타낼 수 있는 원시 값으로, Number의 안전 한계를 넘어서는 큰 정수도 안전하게 저장하고 연산할 수 있습니다. BigInt는 정수 끝에 n을 추가하거나 생성자를 호출해 생성할 수 있습니다. Number와 혼합해 연산할 수 없으며, 이때 TypeError가 발생합니다.

const a = 2n ** 53n;

const b = a + 1n;


console.log(a); // 9007199254740992n
console.log(b); // 9007199254740993n

7. 심볼(Symbol)

ECMA Script 6(ES6)에서 등장한 새로운 데이터 타입으로, 고유하고 변경 불가능한 원시 값이며 객체의 속성 키로 사용할 수 있습니다. 충돌 위험이 없는 고유한 프로퍼티를 만들기 위한 데이터 타입입니다. 어떤 프로그래밍 언어들에선 "아톰"이라고 부르기도 합니다.

const tmp = Symbol('tmp');

console.log(typeof tmp); // "symbol"
console.log(tmp === Symbol('tmp')); // false (단순 디버깅을 위한 설명을 인자값으로 받는다.)

참조형(reference type)

자바스크립트에서 기본형을 제외한 모든 값은 객체로 취급되기 때문에 배열이나 함수 등도 모두 객체로 표현됩니다. 주로 key:value 형태의 데이터를 저장하며, 하나의 값만 저장되는 기본 데이터 타입과는 다르게 여러 개의 프로퍼티를 저장할 수 있습니다. 이런 객체의 프로퍼티는 기본 데이터 타입의 값을 가지거나 다른 객체를 가리킬 수 있습니다. 이러한 성질로 함수도 객체의 프로퍼티로 지정할 수 있고, 자바스크립트에서는 이런 프로퍼티를 메서드라고 부릅니다.

🧐 각 타입의 특징을 자세히 알고 싶다면 이곳(MDN)을 참고하세요!

profile
안녕하세요

0개의 댓글