JavaScript의 BigInt의 사용 방법 JavaScript의 BigInt의 사용 방법에 대해서 알아보자.
BigInt는 JavaScript에서 제공하는 내장 객체로, 정수 값을 안전하게 나타낼 수 있는 임의 정밀도 정수를 다룰 수 있게 한다. JavaScript의 일반 숫자 타입인 Number는 IEEE 754 64비트 부동소수점 형식을 사용하며, 정수를 안전하게 표현할 수 있는 범위는 -(2^53 - 1)에서 2^53 - 1 이다. 이 범위를 벗어난 정수를 다룰 때는 BigInt를 사용해야 합니다.
• BigInt는 숫자 리터럴 뒤에 n을 붙여 표현한다.
• 산술 연산, 비교 연산 등 여러 기본 연산에서 사용 가능하다.
• Number 타입과는 혼합 연산이 불가능하며, 필요시 명시적 변환이 필요하다.
BigInt 생성
BigInt를 생성하는 방법은 리터럴 방식과, BigInt 함수 사용하는 방식 두 가지가 있다.
숫자 끝에 n
을 붙여쓴다.
const bigIntLiteral = 1234567890123456789012345678901234567890 n ;
console. log (bigIntLiteral); // 1234567890123456789012345678901234567890n
숫자로 이뤄진 문자를 BigInt의 parameter로 사용한다.
const bigIntFromFunction = BigInt ( '1234567890123456789012345678901234567890' );
console. log (bigIntFromFunction); // 1234567890123456789012345678901234567890n
기본 연산
BigInt는 +,-,*,/,% 연산자를 사용할 수 있다.
const big1 = 100000000000000000000 n ;
const big2 = 200000000000000000000 n ;
// 덧셈
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
비교 연산
BigInt는 Number와 비교할 수 있다. 하지만 범위 차이를 고려해야 한다.
const big = 100 n ;
const num = 100 ;
console. log (big === BigInt (num)); // true
console. log (big == num); // true (암묵적 변환 발생)
console. log (big > num); // false
console. log (big < num); // false
혼합 연산 주의
BigInt와 Number를 혼합해서 연산하면 TypeError가 발생한다.
const big = 100 n ;
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
큰 정수 계산
일반적인 Number로는 표현이 불가능한 큰 정수를 처리할 수 있습니다.
const factorial = ( n ) => {
let result = 1 n ;
for ( let i = 1 n ; i <= n; i ++ ) {
result *= i;
}
return result;
};
console. log ( factorial ( 20 n ));
// 출력: 2432902008176640000n
안전하지 않은 범위 처리할
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) + 1 n ; // BigInt로 정확히 처리
console. log (bigCalculation); // 9007199254740992n
BigInt는 다음과 같은 상황에서 유용하다.
안전한 정수 범위를 벗어나는 큰 숫자를 다룰 때.
금융 계산처럼 높은 정밀도가 필요한 작업.
암호화, 해싱 알고리즘 등 큰 수를 다루는 작업.
BigInt를 사용할 때는 Number와 혼합 연산이 불가능하다는 점과 소수점 연산에는 적합하지 않다는 점을 주의해야 한다.