데이터 타입
JavaScript 데이터 타입
개요
JavaScript는 동적 타이핑(dynamically typed) 언어로, 변수의 데이터 타입이 실행 시점에 결정됩니다. 이 문서는 JavaScript의 기본 데이터 타입과 객체 타입을 체계적으로 설명하며, 각 타입의 특징과 사용법을 다룹니다. 프로그래밍 효율성을 높이기 위해 타입별 특성과 변환 규칙을 이해하는 것이 중요합니다.
데이터 타입 분류
JavaScript의 데이터 타입은 원시 타입(primitive type) 과 객체 타입(object type) 으로 구분됩니다.
원시 타입
7가지 원시 타입은 다음과 같습니다:
- [number](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/number/number)
: 숫자형
- [string](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/string/string)
: 문자열
- [boolean](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/boolean/boolean)
: 불리언
- [null](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/null/null)
: 의도적으로 값이 없음을 나타냄
- [undefined](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/undefined/undefined)
: 할당되지 않은 변수
- [symbol](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/symbol/symbol)
: 고유한 식별자
- [bigint](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/bigint/bigint)
: 큰 정수
객체 타입
모든 원시 타입을 제외한 나머지가 객체 타입입니다:
- [Object](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Object/Object)
: 일반 객체
- [Array](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Array/Array)
: 배열
- [Function](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Function/Function)
: 함수
- [Date](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Date/Date)
, [RegExp](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/RegExp/RegExp)
등 내장 객체
원시 타입 상세 설명
1. 숫자형(Number)
JavaScript의 숫자형은 IEEE 754 64비트 부동소수점 형식을 따릅니다.
let age = 25; // 정수
let price = 9.99; // 실수
let infinity = 1 / 0; // Infinity
특수 값
- [NaN](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/NaN/NaN)
: Not-a-Number (예: 0 / 0
)
- [Infinity](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Infinity/Infinity)
, -Infinity
2. 문자열(String)
유니코드 기반의 텍스트 데이터입니다. 따옴표 종류에 따라 차이가 없습니다.
let name = "Alice";
let greeting = `Hello, ${name}`; // 템플릿 리터럴
"Hello".toUpperCase() // "HELLO"
"World".length // 5
3. 불리언(Boolean)
참/거짓을 표현하는 2진 논리 타입입니다.
let isActive = true;
let isEmpty = false;
Falsy 값
- false
, 0
, ""
, null
, undefined
, NaN
4. null과 undefined
비교 항목 | null | undefined |
---|---|---|
의미 | 의도적 공백 | 미정의 상태 |
typeof | "object" | "undefined" |
let user = null; // 의도적 초기화
let password; // 암시적 undefined
5. 심볼(Symbol)
고유하고 변경 불가능한 기본 데이터 타입로, 객체 속성 키로 사용됩니다.
const id = Symbol("id");
let obj = {
[id]: 123
};
6. BigInt
2^53 - 1을 초과하는 정수를 표현할 수 있는 타입입니다.
let bigNum = 9007199254740991n;
객체 타입 상세 설명
1. 객체(Object)
키-값 쌍의 집합입니다.
let user = {
name: "Bob",
age: 30
};
속성 접근
user.name // "Bob"
user["age"] // 30
2. 배열(Array)
순서가 있는 데이터 집합입니다.
let fruits = ["apple", "banana"];
fruits[0] = "orange";
배열 메서드
fruits.push("grape");
fruits.length // 3
3. 함수(Function)
일급 객체로, 변수에 할당 가능하고 매개변수로 전달 가능합니다.
function greet(name) {
return `Hello, ${name}`;
}
타입 검사와 변환
typeof 연산자
typeof 42 // "number"
typeof "JS" // "string"
typeof Symbol() // "symbol"
제한 사항
- null
→ "object" (역사적 오류)
- 배열 → "object"
instanceof 연산자
객체의 프로토타입 체인을 확인합니다.
[] instanceof Array // true
타입 변환
암시적 변환 예시
5 + "5" // "55"
"5" - 2 // 3
Number("123") // 123
String(123) // "123"
Boolean(0) // false
최신 타입 관련 기능
옵셔널 체이닝(Optional Chaining)
user?.address?.city // undefined 반환
Null 병합 연산자(Nullish Coalescing)
let name = null ?? "Guest"; // "Guest"
참고 자료
- MDN JavaScript Data Types
- ECMAScript 2023 명세서
- "You Don't Know JS" 시리즈 - Kyle Simpson
이 문서는 ECMAScript 2023 기준으로 작성되었습니다.
이 문서는 AI 모델(qwen-3-235b-a22b)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.