본문 바로가기

프로그래밍 언어/자바스크립트

JavaScript 데이터 타입, 기본 타입부터 객체 타입까지

JavaScript 데이터 타입, 기본 타입부터 객체 타입까지

JavaScript는 동적이고 유연한 언어로, 다양한 데이터 타입을 제공하여 복잡한 로직을 처리할 수 있습니다. 이 가이드에서는 JavaScript에서 사용되는 모든 데이터 타입을 다루며, 기본적인 원시 타입(Primitive Types)부터 객체 타입(Object Types)까지 자세히 설명합니다. 각 타입의 특성을 이해하면 더 안정적이고 유지보수하기 쉬운 코드를 작성하는 데 큰 도움이 될 것입니다.

 

 

목차

  1. JavaScript의 데이터 타입 개요
  2. 원시 타입(Primitive Types)
    1. 숫자(Number)
    2. 문자열(String)
    3. 불리언(Boolean)
    4. null
    5. undefined
    6. 심볼(Symbol)
    7. BigInt
  3. 객체 타입(Object Types)
    1. 일반 객체(Object)
    2. 배열(Array)
    3. 함수(Function)
    4. 날짜(Date)
    5. 맵(Map)과 셋(Set)
    6. WeakMap과 WeakSet
  4. 데이터 타입 변환
  5. 타입 확인 및 비교
  6. 결론

 

JavaScript의 데이터 타입 개요

JavaScript에서는 데이터를 다양한 형태로 표현할 수 있으며, 이들 데이터는 크게 원시 타입과 객체 타입으로 구분됩니다. 원시 타입은 변경 불가능한 값(Immutable)을 나타내며, 객체 타입은 값이 아니라 참조를 통해 데이터를 관리합니다. 올바른 데이터 타입을 선택하고 사용하는 것은 코드의 안정성과 성능에 직접적인 영향을 미칩니다.

 

 

 

원시 타입(Primitive Types)

원시 타입은 더 이상 쪼갤 수 없는 기본적인 데이터 단위를 나타냅니다. JavaScript에서 원시 타입으로 분류되는 항목은 다음과 같습니다:

 

숫자(Number)

JavaScript의 Number 타입은 정수와 부동 소수점을 모두 포함합니다. 특별한 BigInt 타입을 제외한 모든 숫자는 이 타입에 속합니다.

let integer = 42;
let float = 3.14;

자바스크립트는 NaN (Not-a-Number)과 Infinity와 같은 특별한 숫자 값도 처리할 수 있습니다.

 

문자열(String)

String 타입은 텍스트 데이터를 표현합니다. 문자열은 큰따옴표, 작은따옴표, 또는 백틱(``)으로 감싸서 표현할 수 있습니다.

let greeting = "Hello, World!";
let name = 'John Doe';
let templateLiteral = `My name is ${name}`;

문자열은 변경할 수 없는 불변(immutable) 타입이며, 문자열의 길이를 조정하거나 부분 문자열을 추출하기 위해 다양한 메서드를 제공합니다.

 

불리언(Boolean)

Boolean 타입은 참(true)과 거짓(false)을 나타냅니다. 주로 조건문에서 사용됩니다.

let isActive = true;
let isMember = false;

 

null

null은 의도적으로 값이 없음을 나타내는 특별한 타입입니다. 객체가 없다는 것을 명시적으로 나타낼 때 사용됩니다.

let emptyValue = null;

 

undefined

undefined는 변수가 선언되었지만 아직 값이 할당되지 않은 상태를 나타냅니다. 이는 JavaScript에서 매우 중요한 개념으로, null과는 다르게 시스템에서 자동으로 할당될 수 있습니다.

let notAssigned;
console.log(notAssigned); // undefined

 

심볼(Symbol)

Symbol은 ES6에서 도입된 새로운 원시 타입으로, 고유하고 변경 불가능한 식별자를 생성하는 데 사용됩니다. 주로 객체의 속성 키로 사용됩니다.

let symbol1 = Symbol('description');
let symbol2 = Symbol('description');
console.log(symbol1 === symbol2); // false

 

BigInt

BigInt 타입은 자바스크립트에서 큰 정수를 다룰 수 있게 해줍니다. 이 타입은 정수 값의 크기가 매우 클 때 유용합니다.

let bigIntValue = 1234567890123456789012345678901234567890n;

BigInt 타입의 숫자는 n을 붙여서 표현하며, 일반 숫자와 혼용하여 사용할 수 없습니다.

 

 

 

 

객체 타입(Object Types)

객체 타입은 복잡한 데이터 구조를 표현할 수 있으며, JavaScript의 핵심입니다. 객체는 속성과 메서드를 가지며, 다양한 형태로 구현될 수 있습니다.

 

일반 객체(Object)

일반 객체는 키-값 쌍으로 데이터를 저장하는 구조입니다. 중괄호({})를 사용하여 생성하며, 속성은 점 표기법이나 대괄호 표기법으로 접근할 수 있습니다.

let person = {
    name: "John",
    age: 30
};
console.log(person.name); // "John"

 

배열(Array)

Array는 순서가 있는 리스트 형태의 데이터 구조입니다. 인덱스를 통해 요소에 접근할 수 있으며, 다양한 내장 메서드를 제공합니다.

let numbers = [1, 2, 3, 4, 5];
console.log(numbers[0]); // 1

 

함수(Function)

Function은 JavaScript에서 일급 객체로 취급되며, 변수에 할당하거나 다른 함수의 인수로 전달될 수 있습니다. 함수는 코드의 재사용을 가능하게 하며, 복잡한 로직을 캡슐화합니다.

function greet(name) {
    return `Hello, ${name}!`;
}
console.log(greet("Alice")); // "Hello, Alice!"

 

날짜(Date)

Date 객체는 날짜와 시간을 처리하기 위한 객체입니다. 다양한 메서드를 통해 날짜를 계산하거나 포맷팅할 수 있습니다.

let now = new Date();
console.log(now); // 현재 날짜와 시간 출력

 

맵(Map)과 셋(Set)

Map 객체는 키-값 쌍을 저장하며, 객체와 달리 키의 타입에 제한이 없습니다. Set 객체는 중복되지 않는 값들의 집합을 저장합니다.

let map = new Map();
map.set("name", "John");
console.log(map.get("name")); // "John"

let set = new Set([1, 2, 3, 4, 4]);
console.log(set.size); // 4 (중복된 값은 저장되지 않음)

 

WeakMap과 WeakSet

WeakMapWeakSet은 각각 MapSet의 약한 참조 버전입니다. 이들은 가비지 컬렉션이 일어날 때 키가 참조되지 않으면 자동으로 제거되므로, 메모리 관리를 보다 효율적으로 할 수 있습니다.

let weakMap = new WeakMap();
let obj = {};
weakMap.set(obj, "value");
obj = null; // weakMap에서 자동으로 제거됨

 

 

 

데이터 타입 변환

JavaScript에서 데이터 타입은 상황에 따라 자동으로 변환되거나 명시적으로 변환할 수 있습니다. 이 섹션에서는 데이터 타입을 명시적으로 변환하는 방법과 암묵적 변환의 작동 방식을 설명합니다.

 

 

 

타입 확인 및 비교

JavaScript에서 데이터 타입을 확인하는 방법에는 여러 가지가 있습니다. typeof 연산자는 원시 타입을 확인하는 데 유용하며, instanceof 연산자는 객체의 타입을 확인하는 데 사용됩니다. 이 섹션에서는 각 연산자의 사용법과 그 차이점을 다룹니다.

 

 

 

결론

이 가이드에서는 JavaScript에서 사용되는 다양한 데이터 타입을 깊이 있게 다루었습니다. 데이터 타입을 정확히 이해하고 사용하는 것은 코드의 가독성과 유지보수성을 높이는 데 필수적입니다. 각 타입의 특성을 잘 이해하고, 적재적소에 활용하는 것이 JavaScript 개발자로서 성공적인 프로젝트를 수행하는 열쇠가 될 것입니다.