[Javascript] 데이터 타입

SungWoo·2024년 10월 19일

자바스크립트 공부

목록 보기
3/42
post-thumbnail

자바스크립트의 모든 값은 데이터 타입을 가지며, 크게 원시 타입(Primitive type)과 참조 타입Reference type)으로 나눌 수 있다. 지금부터 각 타입은 어떤 특징을 가지고있는지, 데이터 타입이 왜 필요한지에 대해 알아보자.

자바스크립트는 동적 타입 언어

C나 JAVA와 같이 데이터 타입을 사전에 선언하는 정적 타입(static type) 언어와 달리 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있기 때문에 동적 타입 언어(dynamic type)라고 한다.

데이터 타입이 필요한 이유

자바스크립트 엔진은 데이터 타입, 즉 값의 종류에 따라 정해진 크기의 메모리 공간을 확보한다.
즉, 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기도 다르고 메모리에 저장되는 2진수도 다르며 읽어들여 해석하는 방식도 다르다.

ex) 숫자 타입 값의 할당 과정
var score = 100
1. 리터럴 100을 숫자 타입의 값으로 해석
2. 숫자 타입의 값 100을 저장하기 위해 8바이트의 메모리 공간을 확보
3. 100을 2진수로 저장

요약

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

데이터 타입(Data Type)

1. 원시 타입(Primitive Type)

원시 타입은 변경할 수 없는(immutable) 값이다.

1) Number

정수와 실수를 모두 포함하는 숫자 타입을 말한다.
ex. 1, 3.14, -100

2) String

텍스트 데이터를 표현하는 타입으로, 작은 따옴표(''), 큰 따옴표("") 또는 백틱으로 감싸서 표현한다.
ex. 'Hello', "World"

3) Boolean

참, 거짓과 같은 논리값 데이터를 표현하는 타입으로 true 또는 false로 표현한다.

4) Undefined

undefined는 변수를 선언했지만 아직 정의되지 않은 상태를 표현하는 타입이다.
이는 개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값이다.
ex. var x; → (x = undefined)

5) Null

nullundefined와 다르게 값이 비어 있는 상태를 표현한다.
null은 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재, intentional absence)할 때 사용하는 데이터 타입이다. 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다.
ex. let y = null

6) Symbol

ES6 이후에 추가된 데이터 타입으로, 다른 값과 중복되지 않는 유일무이한 값이다. 따라서 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.
ex. var key = Symbol('key')

7) BigInt

ES11 이후에 추가된 데이터 타입으로, Number 타입의 한계를 넘어서는 큰 정수를 표현할 수 있는 타입이다.
ex. let bigInt = 123n let bigInt = BigInt(123)

2. 참조 타입(Reference Type)

참조 타입은 객체를 통해서 참조되는 데이터 타입으로, 값 자체가 아닌 메모리 주소를 참조한다.

1) Object

객체는 여러 값을 키-값 쌍으로 저장할 수 있는 데이터 타입이다. 배열, 함수, 날짜, 사용자 정의 객체 등은 객체의 일종이다.
ex. const obj = { name: 'sean', age: 26 }

2) Array

배열은 여러 값을 순서대로 저장할 수 있는 리스트 형태의 객체이다.
ex. let arr = [1, 2, 3, 4, 5]

3) Function

함수도 객체의 한 종류로, 코드 조각을 실행 가능한 형태로 정의할 수 있다.
ex. function sayHello() { console.log("Hello!") }

4) Date

날짜와 시간을 표현할 수 있는 객체를 말한다.
ex. let now = new Date()

5) RegExp

정규표현식을 다루기 위한 객체를 말한다.
ex. let regex = /is/g

6) Map, Set

특수한 구조의 객체 타입으로 각각 고유한 특징을 가진다.

  • Map : 키-값 쌍을 저장하며, 키의 타입을 제한하지 않음
  • Set : 중복되지 않는 값을 저장하는 컬렉션 객체

타입 확인 방법

typeof 연산자를 사용해 변수의 타입을 확인할 수 있다.

console.log(typeof 42);           // "number"
console.log(typeof "Hello");      // "string"
console.log(typeof true);         // "boolean"
console.log(typeof undefined);    // "undefined"
console.log(typeof null);         // "object" (이는 버그이며 자바스크립트의 초기 버전에서 남은 것이다.)
console.log(typeof Symbol());     // "symbol"
console.log(typeof BigInt(123));  // "bigint"
console.log(typeof []);           // "object" (배열도 object라고 나온다)
console.log(typeof function(){}); // "function"
profile
어제보다 더 나은

0개의 댓글