자료형
자료형과 원시 자료형
자료형이란 값의 성질에 따라 분류한 것이다.
자바스크립트는 자료형을 크게 원시 또는 객체 자료형으로 나누고, 작게는 8개의 세부 자료형으로 나눈다.
원시 자료형의 종류
원시 자료형을 원시 타입 또는 기본 타입이라고 한다. 원시 자료형은 한 번에 단 하나의 값만 가질 수 있는 타입이다.
- 숫자형
- 숫자형은 수의 종류를 구분하지 않는다.
- 소수, 음수, 실수와 같은 수를 모두 포함하는 자료형이다.
- 숫자형에는 정수, 실수 말고도 일반적이지 않은 값들이 있다.
- Infinity, -Infinity : 최솟값이나 최댓값을 구할 때 주로 사용한다. Infinity는 0으로 어떤 수를 나눈 결과이기도 하다.
- NaN : Not a Number이라는 뜻으로 불가능한 숫자형의 결과를 표현할 때 사용하는 값이다. 숫자와 문자열을 곱하면 정상적인 연산의 결과물이 나올 수 없으므로 NaN이라는 값을 얻는다.
let inf = Infinity;
let minf = -Infinity;
let nan = NaN;
/* 사칙 연산 */
console.log(1 + 2); // 3
console.log(1 * 2); // 2
console.log(1 - 2); // -1
console.log(1 / 2); // 0.5
/* 모듈러 연산 */
console.log(1 % 2); // 1
console.log(1 / 0); // Infinity
- 문자형
- 문자열을 포함하는 자료형이다.
- 어떤 값이 문자형이라는 것을 알리기 위해 큰따옴표("") 또는 작은따옴표('')로 감싸야한다.
- 백틱(
``
)을 이용해도 문자형을 만들 수 있다.
let name = '이정환';
let location = "역곡";
let introduce = `${name}은 ${location}에 살고 있습니다`;
console.log(introduce); // 이정환은 역곡에 살고 있습니다
- 불리언, null, undefined
- 불리언 형은 작업을 성공적으로 종료했는지, 어떤 값이 있는지 등을 확인할 때 유용하게 사용한다.
- null은 "아무것도 없다"라는 뜻으로 변수에 아무 값도 할당할 필요가 없을 때 사용한다. 대다수 프로그래밍 언어에서 null은 하나의 값으로 단순하게 취급하지만, 자바스크립트에서는 독립적인 자료형으로 분류한다.
- undefined는 '미정의 값'이라는 뜻이다. C나 자바 언어에서는 변수를 생성하고 아무런 값도 할당하지 않으면 null을 갖지만, 자바스크립트에서는 null 대신 undefined를 가지게 된다.
et emptyVar = null;
console.log(emptyVar); // null
let realEmptyVar;
console.log(realEmptyVar); // undefined
형 변환
어떤 값의 자료형을 다른 자료형으로 변환하는 것을 '형 변환'이라고 한다.
다른 자료형끼리 서로 연산한다는 가정해 보자. 숫자와 문자를 서로 더하는 연산이라면, 프로그래밍에서는 먼저 숫자를 문자로 변환하고 나서 문자와 문자를 이어 붙이는 연산을 수행한다. 숫자를 문자로 변환하는 것처럼 서로 같은 자료형으로 만드는 작업이 선행되어야 연산이 정상적으로 이루어지기 때문이다.
- 묵시적 형 변환
자바스크립트 엔진이 스스로 알아서 변환하는 작업이다. 2번째 예시에서 숫자와 문자의 덧셈에서 자바스크립트가 암묵적으로 숫자를 문자로 형 변환해 계산했기 때문에 문자형 간의 덧셈 연산은 두 문자를 이어 붙인 결과가 되었다.
let number = 10;
let string = 20;
const result = number + string;
console.log(result); // 30
let number = 10;
let string = "20";
const result = number + string;
console.log(result); // 1020
- 명시적 형 변환
묵시적 형 변환과 반대로 내장 함수 등을 이용해 프로그래머가 의도적으로 어떤 자료형을 다른 자료형으로 변경하는 작업이다.
- 숫자형으로 변환
let strA = "10";
let strB = "10개";
let numA = Number(strA);
let numB = Number(strB);
console.log(numA); // 10
console.log(numB); // NaN
함수 Number는 자바스크립트가 기본적으로 제공하는 내장 함수로, 제공된 문자열을 숫자로 변환해 반환한다. 변수 strB처럼 숫자가 아닌 문자를 포함한 문자열은 정상적으로 변환되지 않기 때문에 NaN을 반환한다.
숫자뿐만 아니라 문자도 함께 포함된 문자열을 숫자로 변환하고 싶다면, 함수 parseInt를 사용한다.
Parameter | Description |
value | Required. The value to be parsed. |
radix | Optional. Default is 10. A number (2 to 36) specifying the number system. |
* radix parameter specifies the number system to use: 2 = binary, 8 = octal, 10 = decimal, 16 = hexadecimal
let strA = "10";
let strB = "10개";
let numA = parseInt(strA, 10);
let numB = parseInt(strB, 10);
console.log(numA); // 10
console.log(numB); // 10
함수 parseInt는 Number처럼 괄호 안에 있는 문자열을 숫자로 변환하는 자바스크립트의 내장 함수이다. Number와 달리 괄호 안에 두 개의 값을 콤마로 구분해 전달하는데, 첫 번째 값은 변환하려는 문자열이고, 두 번째 값은 진수이다.
Caution
함수 parseInt가 동작할 때는 문자열의 첫 문자부터 숫자로 변환하므로, 문자열이 숫자가 아닌 문자로 시작한다면 NaN을 반환한다.
let str = "파이팅 2023";
let num = parseInt(str, 10);
console.log(num); // NaN
- 문자열로 변환
let num = 2022;
let str = String(num);
console.log(str); // 2022
변수 num에 저장된 숫자 2022를 함수 String을 이용해 문자열로 변환한다. String 역시 자바스크립트 내장 함수로 인수로 제공된 값을 문자열로 변환해 반환한다.
let varA;
let varB = null;
let varC = true;
let strA = String(varA);
let strB = String(varB);
let strC = String(varC);
console.log(strA); // undefined
console.log(strB); // null
console.log(strC); // true
undefined 값은 문자열 undefined, null 값은 문자열 null, true 값은 문자열 true로 변환된다.
- 불리언으로 변환
let varA = "하이";
let varB = 0;
let varC = ""; // ""는 값이 없기 때문에 Falsy 값으로 간주되어 false를 반환
let boolA = Boolean(varA);
let boolB = Boolean(varB);
let boolC = Boolean(varC);
console.log(boolA); // true
console.log(boolB); // false
console.log(boolC); //
console.log("boolC:", boolC); // boolC: false
console.log(boolC);
를 실행하니 콘솔에 아무것도 없는 것처럼 느껴져서 console.log("boolC:", boolC);
를 한 줄 추가해서 다시 결과를 확인하니 false로 나오는 것을 확인했다.
📌 기억할 것
`a++`처럼 증감 연산자를 변수 `a` 뒤에 두면, 증감 연산의 결과는 연산자가 있는 다음 행부터 반영된다.
피연산자인 변수 뒤에 증감 연산자를 두는 것을 '후위 연산'이라고 하며, 이 연산의 결과는 다음 행부터 적용된다는 특징이 있다.
만일 증감 연산을 작성한 행에서 반영하고 싶다면 증감 연산자를 변수 앞에 두면 된다.
'JavaScript' 카테고리의 다른 글
npm run start vs npm start (1) | 2025.05.22 |
---|---|
🔖 자바스크립트 변수와 상수 - 한 입 크기로 잘라먹는 리액트 1장을 읽고 (1) | 2025.05.01 |