본문 바로가기
javascript/자바스크립트는 왜 그 모양일까

자바스크립트에서의 큰 정수

by yongfront 2024. 3. 5.
반응형
SMALL

자바스크립트에서 64비트 정수가 기본적으로 없는 이유는 자바스크립트가 처음 설계될 때의 컴퓨터 하드웨어와 사용 사례를 고려한 결정 때문입니다. 자바스크립트가 1995년에 처음 개발됐을 때, 웹은 단순한 텍스트와 이미지를 공유하는 용도로 사용되었고, 고성능 컴퓨팅이나 대규모 숫자 계산과 같은 복잡한 작업을 위한 언어로 생각되지 않았습니다.

자바스크립트는 당시의 웹 개발 요구 사항을 충족시키기 위해 간단하고 유연한 언어로 설계되었습니다. 숫자를 다룰 때, 자바스크립트는 단일 숫자 타입인 Number를 사용하는데, 이는 IEEE 754 표준을 따르는 부동소수점 형식입니다. 이 형식은 다양한 크기의 숫자를 표현할 수 있는 유연성을 제공하지만, 정확히 64비트 정수를 표현하는 데는 한계가 있습니다. Number 타입은 약 ±9.007경(2^53 - 1)까지의 정수 정밀도를 제공합니다.

그러나 최근의 웹 애플리케이션과 기술 발전으로 인해 더 큰 정수와 더 정밀한 숫자 연산이 필요한 경우가 증가하고 있습니다. 이러한 요구를 충족시키기 위해, ECMAScript 2020(ES11)에서는 BigInt라는 새로운 숫자 타입을 도입하여 임의 정밀도를 가진 정수를 지원하기 시작했습니다. BigInt를 사용하면 64비트를 넘어서는 정수도 안전하게 처리할 수 있게 되었습니다.

 
 

**BigInt**는 ECMAScript 2020(ES11)에 도입되어, 기존의 Number 타입으로는 정확하게 표현할 수 없는 매우 큰 정수를 표현할 수 있게 해줍니다. **BigInt**를 사용하면 임의의 크기를 가진 정수를 안전하게 저장하고 연산할 수 있습니다.

BigInt 사용법

**BigInt**를 사용하기 위해서는 정수 리터럴 끝에 **n**을 붙이거나, BigInt() 함수를 호출하여 Number 타입의 값을 BigInt 타입으로 변환할 수 있습니다.

// BigInt 리터럴
const bigIntLiteral = 1234567890123456789012345678901234567890n;

// BigInt() 함수를 사용한 변환
const bigIntFromNumber = BigInt("1234567890123456789012345678901234567890");

BigInt와 Number의 차이점

  • 타입: **BigInt**와 **Number**는 서로 다른 타입입니다. 따라서, **BigInt**와 Number 간의 연산은 직접적으로는 허용되지 않습니다. 예를 들어, **BigInt**와 **Number**를 더하려고 하면 타입 에러가 발생합니다. 두 타입을 함께 사용해야 할 경우, 하나를 다른 타입으로 명시적으로 변환해야 합니다.
  • 정밀도: Number 타입은 IEEE 754 부동소수점 숫자를 사용하여 ±(2^53 - 1) 범위의 정수를 안전하게 표현할 수 있습니다. 반면, **BigInt**는 이론상으로는 메모리의 한계까지 어떤 크기의 정수도 표현할 수 있습니다.
  • 연산: BigInt 타입은 정수 연산에 최적화되어 있으며, 표준 산술 연산자를 사용할 수 있습니다. 단, 부동소수점 연산을 수행할 수 없으므로, **BigInt**로 나눗셈을 수행하면 결과가 자동으로 내림 처리됩니다.

사용 시 주의 사항

  • **BigInt**는 브라우저와 JavaScript 환경에 따라 지원되지 않을 수 있으므로, 사용하기 전에 환경의 지원 여부를 확인해야 합니다.
  • JSON으로 **BigInt**를 직접 변환하려고 하면 오류가 발생합니다. BigInt 값을 문자열 등 다른 형태로 변환해야 할 수도 있습니다.
  • **BigInt**와 **Number**를 혼용할 때는 타입 변환에 주의해야 합니다.

**BigInt**의 도입으로 자바스크립트 개발자들은 이전에는 처리하기 어려웠던 큰 정수를 효율적으로 다룰 수 있게 되었으며, 금융 계산, 고정밀 타임스탬프, 큰 숫자를 사용하는 암호화 작업 등 다양한 분야에서의 응용이 가능해졌습니다.

 
728x90
반응형
LIST

'javascript > 자바스크립트는 왜 그 모양일까' 카테고리의 다른 글

불(boolean) 타입  (1) 2024.03.05
자바스크립트에서의 큰 유리수  (1) 2024.03.05
큰 부동소수점  (0) 2024.03.05
숫자와 리터럴  (1) 2024.02.10
자바스크립트에서의 0  (0) 2024.02.10