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

목차
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는 다음 두 가지 방법으로 생성할 수 있습니다:
- 정수 리터럴 뒤에
n을 붙이기 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으로 직렬화할 수 없습니다.");
}
'프로그래밍 언어 > 자바스크립트' 카테고리의 다른 글
| JavaScript String, 문자열 다루기 (0) | 2025.05.10 |
|---|---|
| JavaScript null을 활용한 조건문 최적화 전략 (0) | 2025.04.30 |
| number 타입 심층 분석, JavaScript 숫자의 특성과 한계 (0) | 2025.04.18 |
| true와 false의 세계, JavaScript boolean (0) | 2025.04.12 |
| JavaScript 데이터 타입의 특성, null은 왜 객체인가? (0) | 2025.04.06 |