Responsive Advertisement

JavaScript BigInt: ๋Œ€๊ทœ๋ชจ ์ •์ˆ˜ ์ฒ˜๋ฆฌ์™€ ํ™œ์šฉ๋ฒ•

JavaScript๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆซ์ž๋ฅผ Number ํƒ€์ž…์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Number ํƒ€์ž…์€ ์•ˆ์ „ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ˆซ์ž๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•œ๊ณ„๋ฅผ ๋„˜๋Š” ๋Œ€๊ทœ๋ชจ ์ •์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด BigInt๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. BigInt๋Š” ์ •๋ฐ€๋„๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์•„์ฃผ ํฐ ์ •์ˆ˜๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” JavaScript์˜ BigInt์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ณ , ์ด๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

BigInt๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

BigInt๋Š” ์•„์ฃผ ํฐ ์ •์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ JavaScript์˜ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. JavaScript์˜ Number ํƒ€์ž…์€ ์ตœ๋Œ€ ์•ˆ์ „ ์ •์ˆ˜ ๋ฒ”์œ„๊ฐ€ ์žˆ์œผ๋ฉฐ, ๊ทธ ์ด์ƒ์€ ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • JavaScript์˜ Number ํƒ€์ž…์ด ์•ˆ์ „ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ฐ’: 253 - 1 (์•ฝ 9,007,199,254,740,991)
  • ์ตœ์†Œ ๊ฐ’: -(253 - 1)

์ด ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋Š” ์ˆซ์ž๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” BigInt ํƒ€์ž…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. BigInt๋Š” ์ •์ˆ˜ ๋’ค์— n์„ ๋ถ™์—ฌ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

let bigInt = 1234567890123456789012345678901234567890n;
console.log(bigInt);  // ๊ฒฐ๊ณผ: 1234567890123456789012345678901234567890n

BigInt์˜ ์ƒ์„ฑ ๋ฐฉ๋ฒ•

BigInt๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

1. ์ˆซ์ž ๋’ค์— n์„ ๋ถ™์ด๋Š” ๋ฐฉ๋ฒ•

๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆซ์ž ๋’ค์— n์„ ๋ถ™์ด๋ฉด BigInt๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

let bigInt = 1000000000000000000n;
console.log(bigInt);  // ๊ฒฐ๊ณผ: 1000000000000000000n

2. BigInt() ํ•จ์ˆ˜ ์‚ฌ์šฉ

BigInt() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด์ด๋‚˜ ์ˆซ์ž๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋ฉด BigInt ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

let bigIntFromString = BigInt("123456789012345678901234567890");
let bigIntFromNumber = BigInt(123456789);

console.log(bigIntFromString);  // ๊ฒฐ๊ณผ: 123456789012345678901234567890n
console.log(bigIntFromNumber);  // ๊ฒฐ๊ณผ: 123456789n

BigInt์˜ ํŠน์„ฑ

BigInt๋Š” JavaScript์˜ ๊ธฐ์กด Number ํƒ€์ž…๊ณผ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

1. Number์™€ BigInt์˜ ์—ฐ์‚ฐ

๊ธฐ๋ณธ์ ์œผ๋กœ Number ํƒ€์ž…๊ณผ BigInt ํƒ€์ž… ๊ฐ„์˜ ์ง์ ‘์ ์ธ ์—ฐ์‚ฐ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํƒ€์ž…์ด ๋‹ค๋ฅธ ๋‘ ๊ฐ’์„ ์—ฐ์‚ฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

let bigIntValue = 1000n;
let numberValue = 1000;

console.log(bigIntValue + numberValue);  // ์˜ค๋ฅ˜: Cannot mix BigInt and other types

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด BigInt() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Number๋ฅผ BigInt๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, Number() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด BigInt๋ฅผ Number๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

let sum = bigIntValue + BigInt(numberValue);
console.log(sum);  // ๊ฒฐ๊ณผ: 2000n

2. ์†Œ์ˆ˜์  ์—ฐ์‚ฐ ์ง€์›ํ•˜์ง€ ์•Š์Œ

BigInt๋Š” ์ •์ˆ˜๋งŒ ์ง€์›ํ•˜๋ฉฐ, ์†Œ์ˆ˜์ ์ด ์žˆ๋Š” ๊ฐ’์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์†Œ์ˆ˜์ ์„ ํฌํ•จํ•œ ์ˆซ์ž์™€์˜ ์—ฐ์‚ฐ์€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

let bigIntValue = 1234n;
let floatValue = 12.34;

console.log(bigIntValue + BigInt(floatValue));  // ์˜ค๋ฅ˜ ๋ฐœ์ƒ: Cannot convert a non-integer number to a BigInt

3. ํฐ ์ˆซ์ž์˜ ์ •ํ™•ํ•œ ํ‘œํ˜„

BigInt๋Š” ๋งค์šฐ ํฐ ์ˆซ์ž๋„ ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Number ํƒ€์ž…์—์„œ๋Š” ํฐ ์ˆซ์ž์˜ ์ •๋ฐ€๋„๊ฐ€ ๋–จ์–ด์ง€์ง€๋งŒ, BigInt๋Š” ๋ฌด์ œํ•œ ํฌ๊ธฐ์˜ ์ •์ˆ˜๋ฅผ ์ •๋ฐ€ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let numberValue = 999999999999999999999999;
let bigIntValue = 999999999999999999999999n;

console.log(numberValue);  // ๊ฒฐ๊ณผ: 1e+21 (์ •๋ฐ€๋„ ์†์‹ค)
console.log(bigIntValue);  // ๊ฒฐ๊ณผ: 999999999999999999999999n (์ •ํ™•ํ•œ ๊ฐ’)

BigInt์™€ ๋น„๊ต ์—ฐ์‚ฐ

BigInt๋Š” Number์™€ ๋‹ฌ๋ฆฌ ๋งค์šฐ ํฐ ์ •์ˆ˜๋„ ์•ˆ์ „ํ•˜๊ฒŒ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Number์™€ BigInt๋ฅผ ์ง์ ‘ ๋น„๊ตํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž๋™์œผ๋กœ ํƒ€์ž… ๋ณ€ํ™˜์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

let bigIntValue = 10n;
let numberValue = 10;

console.log(bigIntValue === BigInt(numberValue));  // ๊ฒฐ๊ณผ: true
console.log(bigIntValue == numberValue);  // ๊ฒฐ๊ณผ: true (ํƒ€์ž… ๋ณ€ํ™˜์ด ์ด๋ฃจ์–ด์ง)
console.log(bigIntValue === numberValue);  // ๊ฒฐ๊ณผ: false (ํƒ€์ž…์ด ๋‹ค๋ฆ„)

BigInt์™€ Math ๊ฐ์ฒด

Math ๊ฐ์ฒด๋Š” BigInt ํƒ€์ž…์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Math ๊ด€๋ จ ํ•จ์ˆ˜๋Š” Number ํƒ€์ž…๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

let bigIntValue = 1000n;
console.log(Math.sqrt(bigIntValue));  // ์˜ค๋ฅ˜ ๋ฐœ์ƒ: BigInt๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Œ

์ด ๊ฒฝ์šฐ, Number()๋ฅผ ์‚ฌ์šฉํ•ด BigInt๋ฅผ Number๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ Math ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let sqrtValue = Math.sqrt(Number(bigIntValue));
console.log(sqrtValue);  // ๊ฒฐ๊ณผ: 31.622776601683793

BigInt์˜ ํ™œ์šฉ ์‚ฌ๋ก€

BigInt๋Š” ๋งค์šฐ ํฐ ์ •์ˆ˜๋ฅผ ๋‹ค๋ฃจ๋Š” ์ž‘์—…์—์„œ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ์•”ํ˜ธํ™”, ์ •๋ฐ€ํ•œ ๊ณผํ•™์  ๊ณ„์‚ฐ, ๊ธˆ์œต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ์—์„œ BigInt๋Š” ํ•„์ˆ˜์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ์ •๋ฐ€ํ•œ ๊ณ„์‚ฐ์ด ์š”๊ตฌ๋˜๋Š” ๊ธˆ์œต ๋ฐ ์•”ํ˜ธํ™” ์‹œ์Šคํ…œ์—์„œ BigInt๋Š” ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

JavaScript์˜ BigInt๋Š” ๋งค์šฐ ํฐ ์ •์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. Number ํƒ€์ž…์˜ ํ•œ๊ณ„๋ฅผ ๋„˜๋Š” ํฐ ์ˆซ์ž๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๋‹ค๋ฃจ์–ด์•ผ ํ•  ๋•Œ ์œ ์šฉํ•˜๋ฉฐ, ํƒ€์ž… ๋ณ€ํ™˜๊ณผ ๋น„๊ต ์—ฐ์‚ฐ์—์„œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. BigInt๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•˜๊ณ  ์ •๋ฐ€ํ•œ ๊ณ„์‚ฐ์„ ํ•„์š”๋กœ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ํ™œ์šฉํ•ด ๋ณด์„ธ์š”!

๋Œ“๊ธ€ ์“ฐ๊ธฐ