JavaScript BigInt
JavaScript BigInt: 큰 정수를 다루는 방법
JavaScript의 BigInt는 매우 큰 정수를 다룰 수 있는 데이터 타입으로, 일반적인 Number
타입의 한계를 넘어서기 위해 도입되었습니다.
BigInt는 2^53-1보다 큰 정수 값을 정확하게 표현할 수 있어, 대규모 계산이나 정밀한 수학 연산을 요구하는 상황에서 유용합니다. 이 가이드는 BigInt의 개념, 생성 방법, 사용법, 그리고
주의사항에 대해 상세히 설명합니다.
1. BigInt의 기본 개념
JavaScript에서 Number
타입은 64비트 부동 소수점 형식으로 저장되며, 이로 인해 표현할 수 있는 정수의 최대값은 2^53-1 (약
9,007,199,254,740,991)입니다. 이 값을 초과하는 정수는 정확하게 표현할 수 없습니다. BigInt는 이 한계를 극복할 수 있는 데이터 타입입니다.
1.1. BigInt의 특징
- 정수 전용: BigInt는 정수만을 표현할 수 있으며, 소수점 이하 값은 지원하지 않습니다.
- 안전한 정수: BigInt를 사용하면 큰 정수의 정확한 표현이 가능합니다.
- Number와의 차이: BigInt는
Number
타입과는 별도로 존재하며, 서로 직접적으로 결합할 수 없습니다.
2. BigInt 생성 방법
2.1. 숫자 뒤에 n
추가
가장 간단한 방법은 숫자 뒤에 n
을 추가하여 BigInt를 생성하는 것입니다.
const bigInt1 = 123456789012345678901234567890n;
console.log(bigInt1); // 출력: 123456789012345678901234567890n
2.2. BigInt()
생성자 사용
BigInt()
함수를 사용하여 문자열이나 숫자를 인수로 전달하여 BigInt를 생성할 수 있습니다.
const bigInt2 = BigInt(123456);
console.log(bigInt2); // 출력: 123456n
const bigInt3 = BigInt("123456789012345678901234567890");
console.log(bigInt3); // 출력: 123456789012345678901234567890n
2.3. 문자열을 사용한 생성
문자열을 BigInt로 변환할 때는 반드시 유효한 정수 형식이어야 합니다. 그렇지 않으면 SyntaxError
가 발생합니다.
const bigInt4 = BigInt("123456789012345678901234567890");
console.log(bigInt4); // 출력: 123456789012345678901234567890n
3. BigInt 연산
BigInt는 일반적인 산술 연산자를 사용할 수 있습니다. 그러나 Number
와는 직접적인 연산이 불가능하며, 이 두 타입을 혼합하여 사용할 경우
TypeError
가 발생합니다.
3.1. 기본 산술 연산
const a = 100n;
const b = 200n;
console.log(a + b); // 출력: 300n
console.log(a * b); // 출력: 20000n
console.log(b - a); // 출력: 100n
console.log(b / a); // 출력: 2n
console.log(b % a); // 출력: 0n
3.2. Number와의 연산 주의사항
BigInt와 Number
간의 직접적인 연산은 허용되지 않으므로, 이를 조합하려면 한쪽 타입으로 변환해야 합니다.
const bigInt = 10n;
const number = 5;
// 다음 코드 실행 시 TypeError 발생
// console.log(bigInt + number); // TypeError
// 변환하여 연산 수행
console.log(bigInt + BigInt(number)); // 출력: 15n
console.log(Number(bigInt) + number); // 출력: 15
4. BigInt의 메서드
BigInt는 Number
객체와 유사한 메서드를 지원하지만, BigInt 전용 메서드는 없습니다. 하지만, 문자열로 변환하거나, 기타 메서드와 함께 사용할 수 있습니다.
4.1. toString()
BigInt를 문자열로 변환합니다.
const bigInt = 123456789012345678901234567890n;
console.log(bigInt.toString()); // 출력: "123456789012345678901234567890"
4.2. valueOf()
BigInt의 원시 값(Primitive value)을 반환합니다. 주로 다른 타입과의 비교에서 사용됩니다.
console.log(bigInt.valueOf()); // 출력: 123456789012345678901234567890n
5. 주의사항
- 정밀도 문제: BigInt는 정수만 다루므로, 소수점 이하가 포함된 숫자를 다룰 때는 사용할 수 없습니다. 예를 들어,
BigInt(3.14)
는3n
으로 변환됩니다.
console.log(BigInt(3.14)); // 출력: 3n
- BigInt와 JSON: JSON에서는 BigInt를 지원하지 않으므로, BigInt를 JSON으로 변환하려면 문자열로 변환해야 합니다.
const obj = { value: 123456789012345678901234567890n };
const jsonString = JSON.stringify({ value: obj.value.toString() });
console.log(jsonString); // 출력: {"value":"123456789012345678901234567890"}
- 표현의 일관성: BigInt와 Number 타입을 혼합하여 사용할 경우, 각 타입에 맞게 변환하여 일관성을 유지해야 합니다.
요약
- BigInt: JavaScript에서 매우 큰 정수를 다루기 위한 데이터 타입으로, 2^53-1을 초과하는 정수를 안전하게 표현할 수 있습니다.
- 생성 방법: 숫자 뒤에
n
을 추가하거나,BigInt()
생성자를 사용할 수 있습니다. - 산술 연산: 일반적인 산술 연산자를 지원하지만,
Number
와의 직접적인 연산은 불가능합니다. - 주의사항: 소수점 처리 불가, JSON 지원 문제 등 사용 시 유의해야 할 점들이 있습니다.
JavaScript의 BigInt를 효과적으로 활용하면, 대규모 수학적 계산 및 정밀한 수치 처리를 가능하게 합니다. 이 기능을 통해 더 안전하고 정확한 데이터 처리를 구현해 보세요!