JavaScript BigInt, 정수 한계를 넘어선 대형 숫자 처리
JavaScript에서 정수(Integer) 타입의 최대 크기를 넘어서 계산해야 할 때 BigInt가 필요합니다. 기존의 Number
타입은 **253-1**까지만 정확한 정수 연산이 가능합니다. 하지만 금융, 암호학, 과학 계산 등에서는 더 큰 정수를 다뤄야 합니다. 이 문서에서는 **BigInt의 개념과 활용법을 상세히 알아봅니다.**
목차
1. BigInt란 무엇인가?
BigInt는 **매우 큰 정수를 저장하고 연산할 수 있는 데이터 타입**입니다. 2018년 ES11(ES2020)에서 도입되었으며, 기존 Number
타입과의 가장 큰 차이점은 **정확도(precision)** 입니다.
2. BigInt 생성 방법
BigInt는 두 가지 방식으로 생성할 수 있습니다.
n
을 숫자 뒤에 붙이는 방법BigInt()
함수를 사용하는 방법
// 숫자 뒤에 n을 붙여 생성
let bigNumber1 = 1234567890123456789012345678901234567890n;
// BigInt() 함수를 사용하여 생성
let bigNumber2 = BigInt("1234567890123456789012345678901234567890");
3. BigInt 연산
BigInt는 **기본적인 산술 연산**을 지원합니다.
연산 | 예제 | 결과 |
---|---|---|
덧셈 | 100n + 50n |
150n |
뺄셈 | 100n - 50n |
50n |
곱셈 | 100n * 2n |
200n |
나눗셈 | 10n / 3n |
3n (소수점 이하 버림) |
4. BigInt 비교와 형 변환
BigInt와 Number는 서로 **비교할 수 있지만, 직접 연산은 불가능**합니다.
console.log(100n > 50); // true
console.log(100n == 100); // true (자동 변환)
console.log(100n === 100); // false (타입이 다름)
// BigInt ↔ Number 변환
console.log(Number(100n)); // 100
console.log(BigInt(100)); // 100n
5. BigInt의 실제 활용 사례
BigInt는 기존 Number
타입으로 처리할 수 없는 초대형 정수를 다뤄야 할 때 사용됩니다. 특히, 금융, 암호학, 과학적 계산 등에서 필수적입니다.
① 암호학 (Cryptography)
암호학에서는 **큰 소수(prime number)**를 사용하여 보안 키를 생성합니다. 기존 Number
타입으로는 **253-1** 이상의 정수를 정확히 표현할 수 없지만, BigInt
를 사용하면 초대형 수를 손실 없이 연산할 수 있습니다.
// 2048비트 이상의 대형 소수를 BigInt로 표현
const prime1 = 2857532135438213498213489231438213948231n;
const prime2 = 9783429813749281734982138943217894321891n;
const secureKey = prime1 * prime2; // 암호화 키 생성
console.log(secureKey);
② 금융 데이터 처리 (Financial Data Processing)
금융 분야에서는 **소수점 오차 없이 큰 금액을 계산**해야 합니다. JavaScript의 Number
는 부동소수점 방식이므로 **큰 정수를 다룰 때 정확성이 떨어질 수 있습니다**.
// 은행 계좌 잔고 계산 (정확한 연산 보장)
const balance = 1000000000000000000000n;
const deposit = 250000000000000000000n;
const newBalance = balance + deposit;
console.log(newBalance); // 1250000000000000000000n
③ 정밀한 수학 계산 (Scientific Computation)
**천문학, 물리학, AI 연구**에서는 **매우 큰 숫자를 다뤄야 하는 경우**가 많습니다. 예를 들어, **광년 단위 거리 계산**이나 **뉴턴의 중력 방정식**을 처리할 때 BigInt가 유용합니다.
// 태양과 안드로메다 은하 사이 거리 (광년)
const distanceInLightYears = 24000000000000000000000000n;
console.log(`태양과 안드로메다 은하 사이 거리: ${distanceInLightYears} 광년`);
6. BigInt의 한계점
BigInt는 강력한 기능을 제공하지만, 몇 가지 **제약 사항**이 있습니다. 이를 이해하고 적절한 상황에서 사용하는 것이 중요합니다.
제한 사항 | 설명 |
---|---|
소수점 연산 불가 | BigInt는 정수만 다룰 수 있으며, 소수점이 포함된 연산을 지원하지 않습니다. |
JSON 변환 불가능 | JSON 직렬화 시 BigInt 를 직접 변환할 수 없습니다. toString() 을 활용해야 합니다. |
기존 Number와 연산 불가 | BigInt와 Number를 혼합하여 직접 연산할 수 없습니다. 반드시 변환 후 연산해야 합니다. |
일부 브라우저 미지원 | 최신 브라우저에서만 지원되며, 오래된 환경에서는 사용이 제한될 수 있습니다. |
7. BigInt 사용 시 유의할 점
BigInt를 사용할 때 주의해야 할 몇 가지 핵심 사항을 정리했습니다.
① Number와 직접 연산 금지
BigInt와 Number는 서로 직접 연산할 수 없습니다. 필요할 경우, 명시적으로 변환해야 합니다.
const big = 100n;
const num = 50;
// console.log(big + num); // TypeError 발생
console.log(big + BigInt(num)); // 정상 동작
console.log(Number(big) + num); // 정상 동작
② JSON 변환 시 처리 필요
BigInt는 JSON 형식으로 직접 변환할 수 없으므로, 문자열로 변환해야 합니다.
const data = { value: 12345678901234567890n };
// JSON.stringify(data); // TypeError 발생
// 문자열 변환 후 직렬화
const safeData = { value: data.value.toString() };
console.log(JSON.stringify(safeData)); // {"value":"12345678901234567890"}
③ 특정 연산에서 부적절
BigInt는 **소수점 연산이 불가능**하므로, **부동소수점 계산이 필요한 경우에는 사용할 수 없습니다.** 예를 들어, 금융 애플리케이션에서 **소수점을 포함한 금액을 계산할 경우** BigInt
는 적절하지 않습니다.
❌ 잘못된 예제: BigInt를 나누는 경우, 소수점 이하 값이 강제로 잘려나갑니다.
console.log(10n / 3n); // 결과: 3n (소수점 이하 버림)
소수점을 유지하려면, **Number 타입을 사용하거나 별도의 정밀도 연산 라이브러리**를 활용해야 합니다.
'프로그래밍 언어 > 자바스크립트' 카테고리의 다른 글
null 값 처리, JavaScript 프로그래밍에서 자주 하는 실수 (0) | 2025.03.13 |
---|---|
JavaScript undefined 디버깅, 예상치 못한 동작 해결하기 (0) | 2025.03.01 |
JavaScript에서 숫자 다루기, number 타입 (0) | 2025.02.23 |
boolean 값으로 JavaScript 프로그램 로직 제어하기 (0) | 2025.02.17 |
JavaScript에서 null 체크하는 방법과 활용 사례 (0) | 2025.02.11 |