JavaScript의 BigInt의 사용 방법

JavaScript의 BigInt의 사용 방법에 대해서 알아보자.


JavaScript의 BigInt의 사용 방법

BigInt 란 무엇인가?

BigInt는 JavaScript에서 제공하는 내장 객체로, 정수 값을 안전하게 나타낼 수 있는 임의 정밀도 정수를 다룰 수 있게 한다. JavaScript의 일반 숫자 타입인 Number는 IEEE 754 64비트 부동소수점 형식을 사용하며, 정수를 안전하게 표현할 수 있는 범위는 -(2^53 - 1)에서 2^53 - 1 이다. 이 범위를 벗어난 정수를 다룰 때는 BigInt를 사용해야 합니다.

특징

• BigInt는 숫자 리터럴 뒤에 n을 붙여 표현한다. • 산술 연산, 비교 연산 등 여러 기본 연산에서 사용 가능하다. • Number 타입과는 혼합 연산이 불가능하며, 필요시 명시적 변환이 필요하다.

BigInt 사용 방법

  1. BigInt 생성

BigInt를 생성하는 방법은 리터럴 방식과, BigInt 함수 사용하는 방식 두 가지가 있다.

  • 리터럴 방식

숫자 끝에 n 을 붙여쓴다.

const bigIntLiteral = 1234567890123456789012345678901234567890n;
console.log(bigIntLiteral); // 1234567890123456789012345678901234567890n
  • BigInt 함수 사용

숫자로 이뤄진 문자를 BigInt의 parameter로 사용한다.

const bigIntFromFunction = BigInt('1234567890123456789012345678901234567890');
console.log(bigIntFromFunction); // 1234567890123456789012345678901234567890n
  1. 기본 연산

BigInt는 +,-,*,/,% 연산자를 사용할 수 있다.

const big1 = 100000000000000000000n;
const big2 = 200000000000000000000n;
 
// 덧셈
console.log(big1 + big2); // 300000000000000000000n
 
// 뺄셈
console.log(big2 - big1); // 100000000000000000000n
 
// 곱셈
console.log(big1 * big2); // 20000000000000000000000000000000000000n
 
// 나눗셈 (소수점은 버림)
console.log(big2 / big1); // 2n
 
// 나머지
console.log(big2 % big1); // 0n
  1. 비교 연산

BigInt는 Number와 비교할 수 있다. 하지만 범위 차이를 고려해야 한다.

const big = 100n;
const num = 100;
 
console.log(big === BigInt(num)); // true
console.log(big == num); // true (암묵적 변환 발생)
console.log(big > num); // false
console.log(big < num); // false
  1. 혼합 연산 주의

BigInt와 Number를 혼합해서 연산하면 TypeError가 발생한다.

const big = 100n;
const num = 50;
 
// console.log(big + num); // TypeError: Cannot mix BigInt and other types
 
// 명시적 변환 후 연산
console.log(big + BigInt(num)); // 150n
console.log(Number(big) + num); // 150

BigInt 활용 예제

  1. 큰 정수 계산

일반적인 Number로는 표현이 불가능한 큰 정수를 처리할 수 있습니다.

const factorial = (n) => {
  let result = 1n;
  for (let i = 1n; i <= n; i++) {
    result *= i;
  }
  return result;
};
 
console.log(factorial(20n));
// 출력: 2432902008176640000n
  1. 안전하지 않은 범위 처리할

Number 타입으로는 정밀도가 손실될 수 있는 큰 숫자도 정확히 처리 가능하다.

const maxSafe = Number.MAX_SAFE_INTEGER; // 2^53 - 1
console.log(maxSafe); // 9007199254740991
 
const unsafeCalculation = maxSafe + 1; // Number로 처리하면 오차 발생
console.log(unsafeCalculation); // 9007199254740992 (정확하지 않음)
 
const bigCalculation = BigInt(maxSafe) + 1n; // BigInt로 정확히 처리
console.log(bigCalculation); // 9007199254740992n

정리

BigInt는 다음과 같은 상황에서 유용하다.

  1. 안전한 정수 범위를 벗어나는 큰 숫자를 다룰 때.
  2. 금융 계산처럼 높은 정밀도가 필요한 작업.
  3. 암호화, 해싱 알고리즘 등 큰 수를 다루는 작업.

BigInt를 사용할 때는 Number와 혼합 연산이 불가능하다는 점과 소수점 연산에는 적합하지 않다는 점을 주의해야 한다.