티스토리 뷰
목차
프로그래밍을 시작할 때 가장 먼저 배우는 것 중 하나가 데이터 타입입니다. 마치 우리가 일상에서 다양한 물건을 다루듯이, JavaScript도 여러 가지 "데이터"를 다룹니다.
이번 포스팅에서는 JavaScript에서 다루는 여러 데이터 타입에 대해 알아보고, 각각의 타입이 무엇을 의미하는지 알아보겠습니다.
JavaScript의 데이터 타입이란?
먼저, 데이터 타입이란 무엇일까요? 데이터 타입은 프로그래밍 언어가 다루는 데이터의 종류를 나타냅니다. 어떤 데이터는 숫자일 수도 있고, 어떤 데이터는 텍스트일 수도 있습니다. JavaScript에서는 다양한 데이터 타입이 있으며, 각각의 타입은 특정한 역할을 가지고 있습니다.
JavaScript의 데이터 타입은 크게 원시 타입(Primitive Types)과 객체 타입(Object Types)으로 나눌 수 있습니다. 그럼, 하나씩 살펴볼까요?
원시 타입(Primitive Types)
원시 타입은 JavaScript에서 가장 기본적인 데이터 타입입니다. 이 타입들은 더 이상 분해할 수 없는 기본 값으로 이루어져 있습니다. JavaScript에서 원시 타입에는 7가지가 있습니다.
1. 숫자(Number)
숫자 타입은 말 그대로 숫자를 다룹니다. JavaScript에서는 정수와 부동소수점(소수점이 있는 숫자) 모두 같은 숫자 타입으로 처리됩니다.
let age = 25; // 정수
let height = 1.75; // 부동소수점
숫자 타입은 덧셈, 뺄셈, 곱셈, 나눗셈 등 기본적인 산술 연산을 할 수 있습니다. 특별히 NaN이라는 값이 있는데, 이는 "Not a Number"의 약자로, 숫자가 아닌 값이 포함된 연산 결과를 나타냅니다.
let result = "hello" * 10; // NaN
2. 문자열(String)
문자열은 텍스트 데이터를 다루는 타입입니다. 문자열은 작은따옴표(' ')나 큰따옴표(" ")로 감싸서 표현할 수 있습니다.
let greeting = "Hello, world!";
let singleQuote = 'JavaScript is fun!';
문자열은 다양한 텍스트 조작이 가능합니다. 예를 들어, 두 문자열을 합치거나(concatenate), 특정 문자를 추출할 수 있습니다.
let firstName = "John";
let lastName = "Doe";
let fullName = firstName + " " + lastName; // "John Doe"
3. 불리언(Boolean)
불리언 타입은 true 또는 false라는 두 가지 값만 가질 수 있는 논리적인 타입입니다. 이 타입은 주로 조건문에서 사용되어 프로그램의 흐름을 제어합니다.
let isAdult = true;
let isStudent = false;
불리언 타입은 논리 연산자(&&, ||, !)와 함께 사용되어 조건을 평가하는 데 사용됩니다.
let age = 20;
let isTeenager = (age >= 13) && (age <= 19); // false
4. undefined
undefined는 값이 정의되지 않은 상태를 나타냅니다. 변수는 선언되었지만, 초기화되지 않았을 때 undefined 값을 가집니다.
let name;
console.log(name); // undefined
5. null
null은 의도적으로 "값이 없음"을 나타내는 값입니다. undefined와는 달리, null은 개발자가 명시적으로 설정하는 값입니다.
let selectedColor = null;
이 변수는 나중에 특정 색상 값으로 설정될 수 있음을 나타냅니다.
6. 심벌(Symbol)
심벌은 고유하고 변경 불가능한 원시 값입니다. 주로 객체의 속성(key)을 유일하게 하기 위해 사용됩니다. 심벌은 ES6(ECMAScript 2015)에서 도입된 비교적 새로운 타입입니다.
let id = Symbol("id");
let id2 = Symbol("id");
console.log(id === id2); // false
여기서 id와 id2는 같은 설명을 가지고 있지만, 서로 다른 고유한 심벌입니다.
7. 빅인트(BigInt)
JavaScript에서 매우 큰 정수를 다루기 위해 도입된 타입입니다. 일반 숫자 타입(Number)보다 더 큰 정수를 표현할 수 있습니다. 빅인트는 정수 리터럴 끝에 n을 붙여 생성할 수 있습니다.
let bigNumber = 1234567890123456789012345678901234567890n;
이 값은 일반 숫자 타입으로는 표현할 수 없는 매우 큰 숫자를 나타냅니다.
객체 타입(Object Types)
원시 타입과 달리, 객체 타입은 복잡한 데이터 구조를 표현하는 데 사용됩니다. JavaScript의 객체는 여러 속성(key-value 쌍)을 가질 수 있는 복합 데이터 타입입니다.
1. 객체(Object)
객체는 중괄호 {} 안에 키-값 쌍으로 데이터를 저장하는 구조입니다. 각 키는 문자열이나 심벌이고, 값은 어떤 데이터 타입이든 될 수 있습니다.
let person = {
name: "Alice",
age: 30,
isStudent: false
};
객체의 속성에 접근하려면 점 표기법이나 대괄호 표기법을 사용할 수 있습니다:
console.log(person.name); // "Alice"
console.log(person["age"]); // 30
객체는 매우 유연하고 강력한 구조로, 데이터를 구조화하고 관리하는 데 유용합니다.
2. 배열(Array)
배열은 객체의 특별한 형태로, 순서가 있는 리스트를 저장할 수 있습니다. 배열은 대괄호 []를 사용하여 생성하며, 각 요소는 인덱스를 통해 접근할 수 있습니다.
let colors = ["red", "green", "blue"];
console.log(colors[0]); // "red"
배열은 여러 개의 데이터를 한 곳에 모아 두고, 필요할 때마다 쉽게 접근할 수 있는 편리한 방법입니다.
3. 함수(Function)
함수도 객체의 한 종류로, 코드 블록을 재사용 가능한 단위로 묶어주는 역할을 합니다. 함수를 통해 반복적인 작업을 효율적으로 처리할 수 있습니다.
function greet(name) {
return "Hello, " + name + "!";
}
console.log(greet("John")); // "Hello, John!"
함수는 매개변수를 통해 입력을 받고, 결과를 반환할 수 있어 다양한 작업을 자동화할 수 있습니다.
4. 날짜(Date)
JavaScript에서는 날짜와 시간을 다루기 위해 Date 객체를 사용합니다. Date 객체를 생성하면 현재 날짜와 시간을 자동으로 설정해줍니다.
let now = new Date();
console.log(now); // 현재 날짜와 시간 출력
Date 객체를 사용하면 날짜와 시간 관련 작업을 쉽게 수행할 수 있습니다.
5. 정규 표현식(RegExp)
정규 표현식은 문자열에서 특정 패턴을 찾거나 조작할 때 사용하는 특별한 객체입니다. 자주 사용되지는 않지만, 문자열 데이터 처리에서 매우 강력한 도구입니다.
let pattern = /hello/i;
console.log(pattern.test("Hello, world!")); // true
정규 표현식은 텍스트 검색, 치환 등의 작업을 할 때 유용합니다.
데이터 타입의 동적 타이핑
JavaScript는 동적 타이핑을 지원하는 언어입니다. 이는 변수를 선언할 때 데이터 타입을 명시적으로 지정할 필요가 없으며, 변수에 할당되는 값에 따라 데이터 타입이 자동으로 결정된다는 의미입니다.
let data = 42; // 처음에는 숫자
data = "JavaScript"; // 이제는 문자열
이러한 특성 덕분에 JavaScript는 유연하게 코드를 작성할 수 있지만, 타입 관련 오류가 발생할 가능성도 있습니다. 따라서 타입을 변경할 때 주의가 필요합니다.
JavaScript의 데이터 타입은 프로그래밍의 기초이자 핵심 요소입니다. 원시 타입과 객체 타입을 잘 이해하면, 데이터를 더 효과적으로 관리하고 조작할 수 있습니다. 각 데이터 타입이 가진 특성을 파악하고 적절히 활용하면, 더 깔끔하고 안정적인 코드를 작성할 수 있습니다.
이번 포스팅을 통해 JavaScript의 데이터 타입에 대한 이해가 깊어졌기를 바랍니다. 여러분이 앞으로 마주할 다양한 코딩 상황에서, 이 지식을 활용해 멋진 프로그램을 만들 수 있기를 기대합니다!