새소식

Study/JavaScript

[모던 JavaScript] 코어 자바스크립트 - 자바스크립트 기본 - 5. 자료형

  • -

js에서 값은 문자열이나 숫자형 같은 특정한 자료형에 속한다.

자바스크립트에는 여덟 가지의 기본 자료형이 있다.

자바스크립트의 변수는 자료형에 관계없이 모든 데이터일 수 있다.

변수는 어떤 순간엔 문자열, 어떤 순간엔 숫자가 될 수도 있다.

// no error
let message = "hello";
message = 123456;

이처럼 자료의 타입은 있지만 변수에 저장되는 값은 언제든 바뀔 수 있는 언어를

‘동적 타입(dynamically typed)’ 언어라고 부른다.

 

1. 숫자형

let n = 123;
n = 12.345;

- 숫자형(number type) 정수 및 부동소수점 숫자(floating point number)를 나타낸다.

- 곱셉 * , 나눗셈 / , 덧셈 + , 뺄셈 - 등 다양한 연산이 있다.

- 일반적인 숫자 외에 Infinity, -Infinity, NaN 같은 특수 숫자 값(special numeric value)이 포함된다.

 

* Infinity는 어떤 숫자보다 더 큰 특수 값, 무한대를 나타낸다.

어느 숫자든 0으로 나누면 무한대를 얻을 수 있다.

console.log(1/0) // 무한대

직접 Infinify를 참조할 수도 있다.

console.log(Infinity) // 무한대

 

* NaN은 계산 중에 에러가 발생했다는 것을 나타내주는 값이다.

부정확하거나 정의되지 않은 수학 연산을 사용하면 계산 중 에러가 발생하는데 이때 NaN이 반환된다.

console.log('숫자 아님' / 2) // NaN, 문자를 숫자로 바꾸면 에러가 난다.

NaN은 여간해선 바뀌지 않는다. NaN에 어떤 연산을 추가해도 NaN이 반환된다.

console.log('숫자 아님' / 2+4+5) // NaN

연산 과정 어디선가 NaN이 반환됐다면, 모든 결과에 영향을 미친다.

 

* 수학 연산은 안전하다.

js에서 행하는 수학 연산은 안전하다고 볼 수 있다.

0으로 나누거나 문자를 숫자로 나누려고 하는 이상한 짓을 해도 

js는 치명적인 에러를 내며 죽는 것이 아니라, 그냥 NaN을 반환하며 연산을 종료한다.

현실에선 특수 숫자 값을 숫자로 취급하지 않지만 js에선 숫자형으로 분류한다.

 

2. BigInt

내부 표현 방식 때문에 js에서는 (253-1)(9007199254740991) 보다 큰 값

혹은 -(253-1) 보다 작은 정수는 숫자형으로 나타낼 수 없다.

사실 대부분의 상황에서 이런 제약은 문제가 되지 않지만

암호 관련 작업같이 아주 큰 숫자가 필요한 상황이거나

아주 높은 정밀도로 작업을 해야 할 때는 이런 큰 숫자가 필요하다.

 

BigInt형은 표준으로 채택된지 얼마 안 된 자료형으로, 길이에 상관없이 정수를 나타낼 수 있다.

BigInt형 값은 정수 리터럴 끝에 n을 붙이면 만들 수 있다.

// 끝에 'n'이 붙으면 BigInt형 자료이다.
const bigInt = 1234567890123456789012345678901234567890n;

 

3. 문자형

- js에서 문자열은(string)을 따옴표로 묶는다.

let str = '이거 가능'
let str2 = "쌍 따옴표도 가능"
let pharse = `백틱도 가능 ${str}`

작은 따옴표(') 큰따옴표(") 역 따옴표(`) 가능

큰 따옴표와 작은 따옴표는 기본적인 따옴표로 js에서 차이가 없다.

백틱으로 썼을 때 ${} 이 안에 변수나 표현식을 넣어주면

원하는 변수나 표현식을 문자열 중간에 손쉽게 넣을 수 있다.

let name = 'asha'

// 변수를 문자열 중간에 삽입
console.log(`Hello, ${name}`) // Hello, asha 출력

// 표현식을 문자열 중간에 삽입
console.log(`result = ${1+2}`) // result = 3 출력

 더 복잡한 표현식도 가능하다. 무엇이든 넣을 수 있다.

큰 따옴표나 작은 따옴표에서는 안된다. 다 그냥 string으로 인식한다.

console.log("result = ${1+2}") // result = ${1+2} 출력

 

* 글자형은 없다.

일부 언어는 글자 하나를 저장할 때 쓰이는 자료형,

글자(character)형을 따로 지원한다. 

ex) C 언어와 Java의 char

자바스크립트는 글자형을 지원하지 않는다. 문자형만 있다.

문자형에는 글자가 여러 개, 혹은 한 개가 들어갈 수 있다.

 

4. 불린형 (Boolean)

boolean은 true와 false 두 가지 값 뿐이다.

긍정이나 부정을 나타낼 때 사용한다.

let name = true
let isGreater = 4 > 1

console.log(isGreater) // true 출력

 

5. null

null은 위의 자료형 중 어디에도 속하지 않는 값이다.

null은 오직 null 값만 포함하는 별도의 자료형을 만든다.

let age = null

js의 null은 다른 언어의 null과 성격이 다르다.

다른 언어의 null은 보통 존재하지 않는 객체에 대한 참조null pointer를 나타낼 때 사용한다.

하지만 js에서 null은 존재하지 않는 값(nothing), 비어 있는 값(empty), 알 수 없는 값(unknown)을 나타낸다.

let age = null  <-- 나이를 알 수 없거나 값이 비어 있다는 걸 보여준다.

 

6. undefined 값

- null 값처럼 자신만의 자료형을 형성한다.

값이 할당되지 않은 상태를 나타낼 때 사용한다.

- 변수는 선언했지만 값을 할당하지 않았다면 자동으로 undefined가 할당된다.

let age
console.log(age) // undefined

명시적으로 변수에 undefined를 할당하는 것도 가능은 하지만 권장하진 않는다.

let age = 25
age = undefined
console.log(age) // undefined

값이 비어있거나 알 수 없는 상태를 나타내려면 null 을 사용하는게 좋다.

undefined는 값이 아직 할당되지 않은 변수의 초기값을 위한 예약어로 남겨두자.

 

7. 객체와 심볼

객체(object)는 특수한 자료형이다.

객체형을 제외한 다른 자료형은 문자열이든 숫자든 한 가지만 표현할 수 있다

-> 원시(primitive) 자료형이라고 부른다.

객체는 데이터 컬렉션이나 복잡한 객체(entity)를 표현할 수 있다.

- 이런 특징 때문에 js에서 객체는 더 특별한 취급을 받는다 나중에 더 자세하게 나온다.

심볼(symbol)형은 객체의 고유한 식별자(unique identifier)를 만들 때 사용된다.

- 이것도 나중에 자세하게 나온다.

 

8. typeof 연산자

- 인수의 자료형을 반환한다.

자료형에 따라 처리 방식을 다르게 하고 싶거나, 변수의 자료형을 빠르게 알아낼 때 유용하다.

- 두 가지 형태의 문법을 지원한다. 결과 값은 동일하다.

1. 연산자 : typeof x

2. 함수 : typeof(x)

typeof x를 호출하면 인수의 자료형을 나타내는 문자열을 반환한다.

typeof undefined // "undefined"

typeof 0 // "number"

typeof 10n // "bigint"

typeof true // "boolean"

typeof "foo" // "string"

typeof Symbol("id") // "symbol"

typeof Math // "object"

typeof null // "object"

typeof alert // "function"

Math, typeof null, typeof function 설명

1. Math

- 수학 연산을 제공하는 내장 객체 -> 'object'가 출력된다.

2. typeof null

- 고유한 자료형을 가지는 특수 값으로,

   객체가 아니지만 하위호환성 유지를 위해 오류를 수정하지 않고 남겨둔 상황.

   언어 자체의 오류이므로 null이 객체가 아님에 유의하자.

3. typeof 는 피연산자가 함수면 function을 반환한다.

- 함수형이 따로 있진 않다.

- 함수는 객체에 속한다.

- 형식적으론 잘못된 동작이지만 아주 오래전에 만든 규칙이므로

   하위호환성을 위해 남겨진 상태다.

- 실무에선 유용하게 쓰이는 특징이기도 하다.

 

요약

자바스크립트의 8가지 기본 자료형

1. 숫자형 - 정수, 부동 소수점 숫자 등의 숫자를 나타낼 때 사용. 정수의 한계는 ±253

2. bigint - 길이 제약 없이 정수를 나타낼 수 있다.

3. 문자형 - 빈 문자열이나 글자들로 이뤄진 문자열을 나타낼 때 사용. 단일 문자를 나타내는 별도의 자료형은 없다.

4. 불린형 - true, false를 나타낼 때 사요.

5. null - null 값만을 위한 독립 자료형. 알 수 없는 값을 나타낸다.

6. undefined - undefined 값만을 위한 독립 자료형. 할당되지 않은 값을 나타낸다.

7. 객체형 - 복잡한 데이터 구조를 표현할 때 사용한다.

8. 심볼형 - 객체의 고유 식별자를 만들 때 사용한다.

 

typeof 연산자는 피연산자의 자료형을 알려준다.

- typeof x 또는 typeof (x)

- 피연산자의 자료형을 문자열 형태로 반환.

- null의 typeof 연산은 'object'인데, 이는 언어상 오류다. null은 객체가 아니다.

 

Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.