Posts 모던 자바스크립트 #2.5. 자료형
Post
Cancel

모던 자바스크립트 #2.5. 자료형

모던 JavaScript 튜토리얼을 따라가면서 정리합니다.

2.5. 자료형

자바스크립트의 변수는 자료형에 관계없이 모든 데이터일 수 있다. 자바스크립트는 자료의 타입은 있지만 변수에 저장되는 값의 타입은 언제든지 바뀔 수 있는 “동적 타입(dynamically typed) 언어”이다.

숫자형(number type)

숫자형은 정수 및 부동소수점 숫자(floating point number)를 나타낸다. 일반적이 숫자 외에 Infinity, -Infinity, NaN 같은 특수 숫자 값(special numeric value)가 포함된다.

어느 숫자든 0으로 나누면 Infinity를 얻을 수 있고, Infinity를 직접 참조할 수도 있다. NaN부정확하거나 정의되지 않은 수학 연산을 사용하면 계산 중에 에러가 발생하는데, 이때 반환된다. NaN에는 어떤 추가 연산을 해도 결국 NaN이 반환된다. 즉 연산 과정 어디선가 NaN이 반환되었다면 이는 모든 결과에 영향을 미친다.

1
2
"숫자가 아님" / 2; // NaN, 문자열을 숫자로 나누면 오류 발생
"숫자가 아님" / 2 + 5; // NaN

자바스크립트에서 행해지는 수학 연산안전하다. 0으로 나누거나 숫자가 아닌 문자열을 숫자로 취급하는 등 말이 안 되는 수학 연산을 하더라도 스크립트는 치명적인 에러를 내뿜으며 죽는 것이 아니라 NaN을 반환하며 연산을 종료할 뿐이다.

BigInt

자바스크립트에서는 (253-1) 보다 큰 값 혹은 -(253-1) 보다 작은 정수는 ‘숫자형’을 사용해 나타낼 수 없다. 그러나 암호 관련 작업 등 아주 큰 숫자가 필요하거나 아주 높은 정밀도로 작업을 해야 할 때 이런 큰 숫자가 필요하다. BigInt 형은 표준으로 채택된 지 얼마 안 된 자료형으로, 길이에 상관없이 정수를 나타낼 수 있다. BigInt 형 값은 정수 리터럴 끝에 n을 붙이면 만들 수 있다.

1
const bigInt = 1234567890123456789012345678901234567890n;

문자형

따옴표에는 큰따옴표, 작은따옴표, 역 따옴표(백틱)가 있다. 큰따옴표와 작은따옴표는 기본적인 따옴표로 차이가 없다. 역따옴표로 변수나 표현식을 감싼 후 ${}안에 넣어 주면 원하는 변수나 표현식을 문자열 중간에 손쉽게 넣을 수 잇다. 이렇게 문자열 중간에 들어간 변수나 표현식은 평가가 끝난 후 문자열의 일부가 된다.

1
2
3
4
5
let name = "John";
// 변수를 문자열 중간에 삽입
alert(`Hello, ${name}!`); // Hello John!
// 표현식을 문자열 중간에 삽입
alert(`the result is ${1 + 2}`); // the result is 3

자바의 char과 같은 글자형은 자바스크립트에 존재하지 않는다.

불린형

긍정이나 부정을 나타내는 값을 저장할 때 사용하고, 비교 결과를 저장할 때도 사용된다.

null

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

다른 언어에선 null존재하지 않는 객체에 대한 참조널 포인터(null pointer)를 나타낼 때 사용한다. 하지만 자바스크립트에서는 null존재하지 않는(nothing) 값, 비어있는(empty) 값, 알 수 없는(unknown) 값을 나타내는 데 사용한다.

let age = null;은 나이(age)를 알 수 없거나 그 값이 비어있음을 보여준다.

undefined

자신만의 자료형을 형성한다. undefined값이 할당되지 않은 상태를 나타낼 때 사용한다. 변수는 선언했지만, 값을 할당하지 않았다면 해당 변수에 undefined가 자동으로 할당된다. 변수에 명시적으로 undefined를 할당할 수도 있지만 이것은 권장되지 않는다. 변수가 ‘비어있거나’ ‘알 수 없는’ 상태임을 나타내려면 null을 사용하자.

### 객체와 심볼

객체형을 제외한 다른 자료형은 한 가지만 표현할 수 있기 때문에 원시(primitive) 자료형이라 부른다. 반면 객체는 데이터 컬렉션이나 복잡한 개체(entity)를 표현할 수 있다.

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

typeof 연산자

인수의 자료형을 반환하는 연산자이다. 자료형에 따라 처리 방식을 다르게 하고 싶거나 변수의 자료형을 알아내고자 할 때 유용하다. 연산자 문법(typeof x), 함수 문법(typeof (x)) 모두 지원한다.

1
2
3
4
5
6
7
8
9
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object"  (1)
typeof null // "object"  (2)
typeof alert // "function"  (3)

typeof null의 결과는 "object"이다. null은 별도의 고유한 자료형을 가지는 특수값으로 객체가 아니지만, 하위 호환성을 위해 이런 오류를 수정하지 않고 남겨놓은 상황이다.

typeof 함수의 결과는 "function"이다. 그러나 함수형은 따로 없고 함수는 객체형에 속한다. 하위 호환성 유지를 위해 남겨놓은 상태이다. 한편 실무에서는 이런 특징이 매우 유용하게 사용되기도 한다.

과제

문자열 따옴표

1
2
3
4
5
6
7
8
9
10
11
let name = "Ilya"; 

// 표현식은 숫자 1
alert(`hello ${1}`); // hello 1

// 표현식은 문자열 "name"
alert(`hello ${"name"}`); // hello name

// 표현식 안에 변수가 들어 있기 때문에 이 변수가 평가되어
// 전체 문자열이 반환된다.
alert(`hello ${name}`) // hello Ilya
This post is licensed under CC BY 4.0 by the author.

모던 자바스크립트 #2.4. 변수와 상수

모던 자바스크립트 #2.6. alert, prompt, confirm을 이용한 상호작용

Loading comments from Disqus ...