본문 바로가기

프로그래밍 언어/자바스크립트

JavaScript BigInt란? 대용량 정수 연산을 쉽게 처리하는 법

JavaScript BigInt란? 대용량 정수 연산을 쉽게 처리하는 법

JavaScript에서 일반적인 숫자(Number)는 정수와 부동소수점 모두를 64비트 부동소수점(IEEE 754) 형식으로 처리합니다. 이 방식은 편리하지만 정확히 표현할 수 있는 정수 범위는 ±253 - 1로 제한됩니다. 이 한계를 극복하고자 도입된 것이 BigInt입니다. 본 글에서는 BigInt의 개념부터 사용법, 주의사항까지 체계적으로 설명합니다.

 

 

목차

  1. BigInt란 무엇인가?
  2. 기존 Number 타입의 한계
  3. BigInt 생성 방법
  4. BigInt의 연산 방법
  5. BigInt와 다른 타입 간의 상호작용
  6. 실전 사용 예제
  7. 주의할 점과 한계

 

1. BigInt란 무엇인가?

BigInt정수 연산에 특화된 데이터 타입으로, 숫자의 정확성을 잃지 않고 자바스크립트에서 아주 큰 정수를 다룰 수 있게 합니다. ECMAScript 2020(ES11)에서 도입되었으며, 다양한 브라우저에서 지원됩니다.

예시:

const big = 1234567890123456789012345678901234567890n;
console.log(big); // 1234567890123456789012345678901234567890n
  

 

 

 

2. 기존 Number 타입의 한계

JavaScript의 Number는 64비트 부동소수점 형식으로, 아래와 같은 한계를 가집니다:

  • 정확히 표현할 수 있는 범위: -(253 - 1) ~ 253 - 1
  • 큰 정수를 다룰 때 오차가 발생할 수 있음
const a = 9007199254740991;     // 2^53 - 1
console.log(a + 1);             // 9007199254740992
console.log(a + 2);             // ❌ 9007199254740992 (오차 발생)
  

 

 

 

3. BigInt 생성 방법

BigInt는 다음 두 가지 방법으로 생성할 수 있습니다:

  1. 정수 리터럴 뒤에 n을 붙이기
  2. BigInt() 함수를 사용하기
const big1 = 999999999999999999999999n;
const big2 = BigInt("12345678901234567890");
  

 

 

 

4. BigInt의 연산 방법

BigInt는 다음과 같은 연산을 지원합니다:

  • +, -, *, /, % : 기본 산술 연산
  • **, <<, >> : 거듭제곱, 비트 연산
  • 비교 연산자 (<, >, === 등)

주의: BigInt 간의 연산만 가능하며, Number와 혼합하면 에러가 발생합니다.

const x = 5n;
const y = 2n;
console.log(x ** y); // 125n
console.log(x / y);  // 2n (소수점 제거됨)
  

 

 

 

 

5. BigInt와 다른 타입 간의 상호작용

BigInt는 Number와 직접 연산이 불가능합니다. 타입을 맞춰줘야 합니다:

연산 결과
BigInt + Number TypeError 발생
BigInt + BigInt 정상 연산
BigInt === Number false (엄격 비교)

 

 

 

6. 실전 사용 예제

BigInt는 다음과 같은 분야에서 주로 활용됩니다:

  • 암호화(Cryptography)
  • 블록체인 숫자 처리
  • 과학 및 금융 데이터에서의 고정밀 정수

예시: 2048비트 암호 키를 생성하는 과정

const prime = BigInt("340282366920938463463374607431768211507");
const key = prime * 3n;
console.log(key.toString());
  

 

 

 

7. 주의할 점과 한계

  • BigInt는 Math 객체 함수들과 함께 사용할 수 없습니다.
  • JSON.stringify()로 직렬화 불가 → TypeError 발생
  • 브라우저 호환성 확인 필요 (특히 구형 브라우저에서는 미지원)

예외 처리 예시:

try {
  JSON.stringify(123n);
} catch (e) {
  console.error("BigInt는 JSON으로 직렬화할 수 없습니다.");
}