Skip to main content

Command Palette

Search for a command to run...

JavaScript Coding - 2. Types-number

Updated
•3 min read•View as Markdown

Types in JavaScript

JavaScript는 Dynamic type 언어에 해당한다. 이는 간단하게 변수가 생성될 때 특정 Type을 가지는 것이 아니고 어떤 Type을 지정하냐에 따라 유동적으로 바뀔 수 있음을 뜻한다. Dynamic type에 대한 자세한 내용은 이 포스트를 확인하도록 하자.

또한 JavaScript 언어는 Weakly typed 언어로 Type 두개를 합칠 때 error를 내기보다는 type 변환을 자동으로 해준다. 모든 경우에 해주는 것은 아니다. 가장 대표적인 예시는 Number와 String을 합칠 때 숫자가 String으로 바뀌어 합쳐지는 것이다. 이후의 포스트에서 더 자세히 다루어보자.

Data types and Data structure

JavaScript에서는 다양한 Type이 있다. 그중에서 가장 기본적인 Type들을 Primative Value라고 한다. 모든 Type들 중에서 Object를 제외한 immutable value를 Primative Value라고 부른다. 아래는 Primative의 종류와 표이다.

Typetypeof return valueObject wrapper
Null“object”N/A
Undefined“undefined”N/A
Boolean“boolean”Boolean
Number“number”Number
BigInt“bigint”BigInt
String“string”String
Symbol“symbol”Symbol

Number type

Number type은 double-precision 64-bit binary format IEEE 754 value로 이 방법을 사용해서 숫자를 저장한다.

처음 1 bit는 부호(Sign)를 나타낸다. 11 bit는 몇 승인지 나타낸다. 나머지 52 bit는 소수점 아래의 숫자를 나타낸다. IEEE 754 value를 사용하여 표현한 숫자는 양수는 다음 범위에 속한다. 이는 각 bit를 사용해서 나타낼 수 있는 숫자 조합을 생각해보면 알 수 있다.

$$2^{-1074} \sim 2^{1023}\times(2-2^{-51})$$

음수의 경우 앞의 비트만 0에서 1로 바꾸면 되기 때문에 숫자의 범위에는 부호가 바뀌는 것 이외에는 차이가 발생하지 않는다.

하지만 위의 범위는 단순하게 나타낼 수 있는 범위이지 정확하게 그 숫자를 표현할 수 있는 범위는 아니다. 우리는 코딩을 할 때 주로 10진법을 사용하는 것과 달리 데이터는 2진법으로 저장되기 때문에 일반적으로 0.1, 0.2와 같은 소수를 입력하려고 한다면 정확한 그 값이 아닌 이에 가장 가까운 표현할 수 있는 2진법 숫자가 저장된다. 이는 숫자가 커질수록 그 오차의 정도(%)가 커지게 된다. 그렇기에 JavaScript 에서는 안전하게 표현할 수 있는 수의 범위를 정해놓았다. 이는 다음 범위에 해당한다. 이 범위 이외에서는 위에서 말한 근사치를 저장을 하게 된다.

$$-(2^{53}-1) \sim (2^{53}-1)$$

코드에서 Number의 최솟값과 최댓값을 사용하고 싶다면 다음 코드를 통해 얻을 수 있다. 이때 MIN_VALUE와 MAX_VALUE는 절댓값의 최솟값과 최댓값을 말한다.

console.log(Number.MIN_VALUE);
console.log(Number.MAX_VALUE);
5e-324
1.7976931348623157e+308

코드에서 Number의 안전한 범위에서의 최솟값, 최댓값을 사용하고 싶다면

console.log(Number.MIN_SAFE_INTEGER);
console.log(Number.MAX_SAFE_INTEGER);
-9007199254740991
9007199254740991

내가 사용한 숫자가 Safe Integer의 범위에 있는지 확인하고 싶을 때는

Number.isSafeInteger(123);
true

Number type에 매우 큰 수를 넣는다면?

만약 Number type에 최댓값보다 더 큰 수 혹은 최댓값보다 더 작은 수가 들어온다면 어떻게 될까?

JavaScript에서는 Number Type의 한계를 뛰어넘는 숫자는 모두 0 혹은 무한으로 취급한다. 이는 다음 4가지 경우로 나누어볼 수 있다.

  • 양수 중 Number.MAX_VALUE 보다 큰 경우 : + Infinity

  • 양수 중 Number.MIN_VALUE보다 작은 경우 : +0

  • 음수 중 - Number.MAX_VALUE보다 작은 경우 : - Infinity

  • 음수 중 - Number.MIN_VALUE보다 큰 경우 : - 0

Number.POSITIVE_INFINITY
Number.NEGATIVE_INFINITY

코드에서 양의 무한과 음의 무한은 다음과 같이 불러올 수 있으며 + Infinity 와 - Infinity는 수학에서 사용하는 무한의 개념과 비슷하게 작동한다. 무한이 생기는 순간 다양한 연산에서 우리가 원하는 결과를 얻지 못할 수도 있기 때문에 변수에 숫자를 저장하기 전에 Number의 범위 내에 있는지 고려 해보아야 한다.

Number type에 숫자가 아닌 다른 변수를 저장한다면?

계산을 하여 Number type으로 바꾸었는데 숫자가 아닌 값이 들어왔다면 어떻게 표현이 될까? 이 경우에는 NaN(Not a Number)이 나타난다. NaN은 값(Value)로 분류되며 NaN는 대부분 계산식의 결과가 숫자가 아닐 때 나타나게 된다.

그리고 NaN은 JavaScript에서 자기 자신과 동일하지 않은 유일한 값(Value)이다.

Big-int Type

실제 코딩을 하다 보면 Number type의

More from this blog

'pip'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

What is pip? pip는 Pip Install Packages 의 약자로 간단하게 파이썬으로 작성된 라이브러리들을 관리한다. 패키지와 모듈을 관리하는 역할을 한다. 패키지는 모듈에 필요한 파일을 모아 놓은 것으로 모듈들은 Python 코드들의 라이브러리의 형태로 이루어져 있다. 일반적으로 Python 3.4 이상의 버전을 다운 받으면 일반적으로 pip가 포함되어있다. C:\User>pip --version 위의 코드는 정상적으로 pip...

Mar 18, 20253 min read5
P

pluto6561's CS blog

7 posts