142 lines
5.1 KiB
Markdown
142 lines
5.1 KiB
Markdown
# 데이터 타입과 형 변환
|
|
|
|
자바스크립트에서 **데이터 타입(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)
|
|
백틱(`)으로 감싸서 문자열을 표현하는 방법으로, 변수를 직접 삽입하거나 여러 줄의 문자열을 간편하게 작성할 수 있습니다.
|
|
```javascript
|
|
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 연산자
|
|
|
|
데이터 타입을 문자열로 반환합니다.
|
|
```javascript
|
|
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 메서드
|
|
|
|
배열인지 확인하는 방법입니다.
|
|
|
|
```javascript
|
|
console.log(Array.isArray([1, 2, 3])); // true
|
|
console.log(Array.isArray({})); // false
|
|
```
|
|
|
|
## 형 변환(Type Conversion)
|
|
### 암시적 형 변환 (Implicit Type Coercion)
|
|
자바스크립트가 특정 상황에서 자동으로 데이터 타입을 변환하는 경우입니다.
|
|
|
|
#### 문자열과 숫자의 결합
|
|
```javascript
|
|
console.log("5" + 2); // "52" (숫자가 문자열로 변환)
|
|
console.log("5" - 2); // 3 (문자열이 숫자로 변환)
|
|
```
|
|
#### 불리언 변환
|
|
자바스크립트는 조건문에서 값을 불리언으로 암시적으로 변환합니다.
|
|
- falsy 값: false, 0, "", null, undefined, NaN
|
|
- 나머지는 모두 truthy 값으로 평가됩니다.
|
|
```javascript
|
|
console.log(Boolean(0)); // false
|
|
console.log(Boolean("Hello")); // true
|
|
```
|
|
|
|
### 명시적 형 변환 (Explicit Type Conversion)
|
|
개발자가 명시적으로 데이터 타입을 변환하는 방법입니다.
|
|
|
|
#### 숫자로 변환
|
|
`Number(string)` 또는 `parseInt(string)`, `parseFloat(string)`를 사용합니다.
|
|
|
|
```javascript
|
|
console.log(Number("123")); // 123
|
|
console.log(Number("Hello")); // NaN
|
|
console.log(Number(true)); // 1
|
|
console.log(Number(false)); // 0
|
|
```
|
|
|
|
#### 문자열로 변환
|
|
`String(number)` 또는 `${number}` 또는 `toString()` 메서드를 사용합니다.
|
|
|
|
```javascript
|
|
console.log(String(123)); // "123"
|
|
console.log((123).toString()); // "123"
|
|
console.log(String(true)); // "true"
|
|
```
|
|
|
|
#### 불리언으로 변환
|
|
`Boolean()` 함수를 사용합니다.
|
|
|
|
```javascript
|
|
console.log(Boolean(1)); // true
|
|
console.log(Boolean(0)); // false
|
|
console.log(Boolean("")); // false
|
|
console.log(Boolean("Text")); // true
|
|
```
|
|
|
|
## 데이터 타입의 특이한 사례
|
|
### null과 undefined
|
|
null은 "값이 없음"을 명시적으로 나타내지만, undefined는 "값이 할당되지 않음"을 나타냅니다.
|
|
|
|
```javascript
|
|
console.log(null == undefined); // true
|
|
console.log(null === undefined); // false
|
|
```
|
|
### NaN (Not a Number)
|
|
숫자가 아닌 값을 연산하려 할 때 발생하며, 자기 자신과도 같지 않은 유일한 값입니다.
|
|
|
|
```javascript
|
|
console.log(NaN === NaN); // false
|
|
console.log(Number.isNaN(NaN)); // true
|
|
```
|
|
### 객체와 배열의 형 변환
|
|
객체는 문자열로 변환될 때 "[object Object]"를 반환합니다.
|
|
```javascript
|
|
const obj = { a: 1 };
|
|
console.log(String(obj)); // "[object Object]"
|
|
console.log(obj + ""); // "[object Object]"
|
|
```
|