5.1 KiB
데이터 타입과 형 변환
자바스크립트에서 **데이터 타입(Data Type)**은 값의 종류를 정의하며, 프로그래밍 언어의 기본 요소입니다. 또한, 동적 타이핑(dynamically typed) 언어인 자바스크립트에서는 값의 타입이 실행 중에 변경될 수 있기 때문에 **형 변환(Type Conversion)**에 대한 이해가 중요합니다.
자바스크립트의 데이터 타입
자바스크립트의 데이터 타입은 크게 **원시 타입(Primitive Type)**과 **참조 타입(Reference Type)**으로 나뉩니다.
원시 타입(Primitive Type)
값 자체가 메모리에 저장되는 데이터 타입입니다.
- 숫자(Number): 모든 숫자는 64비트 부동소수점으로 저장됩니다. 정수와 실수를 구분하지 않습니다.
- 예: 42, 3.14, -10
- 특별한 값: NaN(Not a Number), Infinity, -Infinity
- 문자열(String): 텍스트 데이터로, 작은따옴표(')나 큰따옴표(") 또는 백틱(`)으로 묶어 표현합니다.
- 예: "Hello", 'World', `Template ${value}`
- 불리언(Boolean): 참과 거짓을 나타냅니다.
- 예: true, false
- undefined: 변수가 선언되었으나 값이 할당되지 않은 상태.
- 예: let x; console.log(x); // undefined
- null: 값이 없음을 명시적으로 나타냄.
- 예: let y = null;
- 심볼(Symbol): 고유한 식별자를 생성하기 위해 사용됩니다.
- 예: const sym = Symbol("unique");
템플릿 리터럴 (ES6)
백틱(`)으로 감싸서 문자열을 표현하는 방법으로, 변수를 직접 삽입하거나 여러 줄의 문자열을 간편하게 작성할 수 있습니다.
let name = "Alice";
let age = 30;
let greeting = `Hello, my name is ${name} and I am ${age} years old.`;
참조 타입(Reference Type)
값이 메모리 주소(참조)에 저장되며, 복잡한 데이터 구조를 표현합니다.
- 객체(Object): 키-값 쌍으로 이루어진 데이터 구조.
- 예: { name: "Alice", age: 25 }
- 배열(Array): 순서가 있는 데이터 리스트.
- 예: [1, 2, 3, 4]
- 함수(Function): 실행 가능한 코드 블록.
- 예: function add(a, b) { return a + b; }
- 날짜(Date)
- 정규표현식(RegExp)
데이터 타입 확인
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 { key: "value" }); // "object"
Array.isArray 메서드
배열인지 확인하는 방법입니다.
console.log(Array.isArray([1, 2, 3])); // true
console.log(Array.isArray({})); // false
형 변환(Type Conversion)
암시적 형 변환 (Implicit Type Coercion)
자바스크립트가 특정 상황에서 자동으로 데이터 타입을 변환하는 경우입니다.
문자열과 숫자의 결합
console.log("5" + 2); // "52" (숫자가 문자열로 변환)
console.log("5" - 2); // 3 (문자열이 숫자로 변환)
불리언 변환
자바스크립트는 조건문에서 값을 불리언으로 암시적으로 변환합니다. - falsy 값: false, 0, "", null, undefined, NaN - 나머지는 모두 truthy 값으로 평가됩니다.
console.log(Boolean(0)); // false
console.log(Boolean("Hello")); // true
명시적 형 변환 (Explicit Type Conversion)
개발자가 명시적으로 데이터 타입을 변환하는 방법입니다.
숫자로 변환
Number(string) 또는 parseInt(string), parseFloat(string)를 사용합니다.
console.log(Number("123")); // 123
console.log(Number("Hello")); // NaN
console.log(Number(true)); // 1
console.log(Number(false)); // 0
문자열로 변환
String(number) 또는 ${number} 또는 toString() 메서드를 사용합니다.
console.log(String(123)); // "123"
console.log((123).toString()); // "123"
console.log(String(true)); // "true"
불리언으로 변환
Boolean() 함수를 사용합니다.
console.log(Boolean(1)); // true
console.log(Boolean(0)); // false
console.log(Boolean("")); // false
console.log(Boolean("Text")); // true
데이터 타입의 특이한 사례
null과 undefined
null은 "값이 없음"을 명시적으로 나타내지만, undefined는 "값이 할당되지 않음"을 나타냅니다.
console.log(null == undefined); // true
console.log(null === undefined); // false
NaN (Not a Number)
숫자가 아닌 값을 연산하려 할 때 발생하며, 자기 자신과도 같지 않은 유일한 값입니다.
console.log(NaN === NaN); // false
console.log(Number.isNaN(NaN)); // true
객체와 배열의 형 변환
객체는 문자열로 변환될 때 "[object Object]"를 반환합니다.
const obj = { a: 1 };
console.log(String(obj)); // "[object Object]"
console.log(obj + ""); // "[object Object]"