본문 바로가기

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

JavaScript bigint, 정수 제한을 넘어선 대형 숫자 처리

JavaScript bigint, 정수 제한을 넘어선 대형 숫자 처리

JavaScript는 수학적 연산을 다루는 데 있어 중요한 기능을 제공하지만, 기본적인 Number 타입은 253-1 이상의 숫자를 처리할 수 없습니다. 이러한 한계를 해결하기 위해 ES2020에서 도입된 bigint 타입은 매우 큰 정수를 손실 없이 처리할 수 있도록 지원합니다. 이 가이드에서는 bigint의 기본 개념부터 실제 활용까지 단계적으로 설명합니다.

 

 

목차

  1. bigint란 무엇인가?
  2. bigint 생성 방법
  3. bigint와 Number 비교
  4. bigint 연산
  5. bigint 사용 시 주의사항
  6. 실용적인 bigint 활용 예제

 

bigint란 무엇인가?

bigint는 JavaScript에서 매우 큰 정수를 처리할 수 있는 데이터 타입입니다. 기존의 Number 타입은 최대 253 - 1까지 표현할 수 있지만, bigint는 이보다 훨씬 더 큰 범위의 정수를 정확하게 처리할 수 있습니다. bigint는 숫자의 끝에 n을 붙여서 선언하며, 이를 통해 큰 숫자도 정밀하게 다룰 수 있습니다.

 

 

bigint 생성 방법

JavaScript에서 bigint를 생성하는 방법은 간단합니다. 두 가지 방식으로 생성할 수 있으며, 숫자의 끝에 n을 붙이는 방법과 BigInt() 생성자를 사용하는 방식이 있습니다.

1. 숫자 뒤에 n을 붙이는 방법

let bigNum = 1234567890123456789012345678901234567890n;

위 예제처럼 큰 숫자 뒤에 n을 붙이면 bigint 타입의 숫자가 생성됩니다.

2. BigInt() 생성자 사용

let bigNum = BigInt("1234567890123456789012345678901234567890");

BigInt() 생성자를 사용해 문자열 형태의 숫자를 bigint로 변환할 수 있습니다.

 

 

bigint와 Number 비교

bigintNumber는 모두 숫자를 표현하지만, 그 범위와 정확도 면에서 차이가 있습니다.

  • 정밀도: Number는 부동 소수점 기반이므로 매우 큰 숫자는 정밀도가 손실될 수 있습니다. 반면, bigint는 큰 숫자도 손실 없이 표현할 수 있습니다.
  • 성능: bigint는 매우 큰 숫자를 처리할 수 있지만, 연산 속도는 Number보다 느릴 수 있습니다.
  • 호환성: bigintNumber와 직접적으로 연산할 수 없으며, 두 타입을 함께 사용하려면 명시적으로 변환해야 합니다.

예를 들어, 다음과 같은 코드는 오류를 발생시킵니다.

let bigNum = 1000n;
let num = 500;
console.log(bigNum + num); // TypeError 발생

이 문제를 해결하려면 두 타입 중 하나를 변환해야 합니다.

console.log(bigNum + BigInt(num)); // 올바른 결과 출력

 

 

bigint 연산

bigint는 기본적인 산술 연산을 지원합니다. 덧셈, 뺄셈, 곱셈, 나눗셈 등을 bigint 타입으로 처리할 수 있습니다.

1. 덧셈

let a = 100n;
let b = 200n;
let sum = a + b;
console.log(sum); // 300n 출력

2. 나눗셈

bigint의 나눗셈은 Number와 달리 소수점 아래 숫자를 버립니다.

let x = 10n;
let y = 3n;
console.log(x / y); // 3n 출력

 

 

 

 

bigint 사용 시 주의사항

bigint는 매우 유용하지만 몇 가지 주의사항이 있습니다.

  • JSON 변환 불가: bigint는 JSON 형식으로 직렬화할 수 없습니다. 이를 직렬화하려고 하면 오류가 발생합니다. 대신, string으로 변환한 후 처리해야 합니다.
  • 타입 간 연산 불가: Numberbigint 간에는 연산이 불가능하므로, 연산을 하기 전에 명시적인 타입 변환이 필요합니다.
  • 브라우저 호환성: 모든 브라우저에서 bigint를 지원하지 않을 수 있으므로, 호환성 검토가 필요합니다.

 

 

실용적인 bigint 활용 예제

bigint는 특히 암호화, 금융 계산, 대형 데이터 처리 등 매우 큰 숫자를 다룰 필요가 있는 상황에서 유용합니다.

1. 금융 계산에서의 bigint 활용

let largeAmount = 1000000000000000000000000n;
let interestRate = 5n;
let total = largeAmount + (largeAmount * interestRate / 100n);
console.log(total); // 큰 숫자 연산 결과 출력

위 예제는 금융 계산에서 큰 숫자에 대한 이자 계산을 다룹니다. bigint를 사용함으로써 큰 금액을 정확하게 처리할 수 있습니다.

2. 암호화 및 해시 계산에서의 bigint

암호화 알고리즘에서 큰 정수를 다루는 것은 필수적입니다. bigint는 이러한 작업에서 데이터 정확도를 보장해 줍니다.

let bigPrime = 1234567890123456789012345678901234567890n;
let secretKey = 987654321098765432109876543210987654321n;
let encrypted = bigPrime * secretKey;
console.log(encrypted); // 암호화된 큰 숫자 출력

 

 

결론

JavaScript의 bigint는 기존의 Number 타입으로 처리할 수 없는 매우 큰 숫자를 다룰 때 필수적인 도구입니다. 특히 대형 데이터, 금융 계산, 암호화 등 다양한 분야에서 매우 유용하게 사용될 수 있습니다. 이 가이드를 통해 bigint를 활용하여 더 나은 숫자 처리 방법을 찾아보세요.