์๋ฐ์คํฌ๋ฆฝํธ BigInt์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์๊ณผ ์์์ ํฐ ์ ์ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ ์ฅ์ ์ต์ ํ ๊ธฐ์ ์ ํ์ํฉ๋๋ค. BigInt๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํ ๊ตฌํ ์ธ๋ถ ์ฌํญ, ์ฑ๋ฅ ์ํฅ, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํ์ธ์.
์๋ฐ์คํฌ๋ฆฝํธ BigInt ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์: ํฐ ์ซ์ ์ ์ฅ์ ์ต์ ํ
์๋ฐ์คํฌ๋ฆฝํธ์ BigInt๋ Number ํ์
์ผ๋ก ์์ ์ ์ผ๋ก ํํํ ์ ์๋ ์ต๋ ์์ ์ ์์ธ 253 - 1๋ณด๋ค ํฐ ์ ์๋ฅผ ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๋ด์ฅ ๊ฐ์ฒด์
๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ํธํ, ๊ธ์ต ๊ณ์ฐ, ๊ณผํ ์๋ฎฌ๋ ์ด์
, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํฐ ์๋ณ์ ์ฒ๋ฆฌ ๋ฑ ๋งค์ฐ ํฐ ์ซ์๋ก ์ ํํ ๊ณ์ฐ์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด ๊ธ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด BigInt ๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์๊ณผ ์ ์ฅ์ ์ต์ ํ ๊ธฐ์ ์ ๋ํด ์์ธํ ์์๋ด
๋๋ค.
BigInt ์๊ฐ
BigInt ์ด์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์๋ค์ด ํฐ ์ ์ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๊ธฐ๋ฅ์ ์ผ๋ก๋ ์ ์ฉํ์ง๋ง, ์ข
์ข
์ฑ๋ฅ ์ค๋ฒํค๋์ ํตํฉ์ ๋ณต์ก์ฑ์ ๋๋ฐํ์ต๋๋ค. ECMAScript 2020์ ๋์
๋ BigInt๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊น์์ด ํตํฉ๋ ๋ค์ดํฐ๋ธ ์๋ฃจ์
์ ์ ๊ณตํ์ฌ ์๋นํ ์ฑ๋ฅ ํฅ์๊ณผ ๋ ์ํํ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์๋ฅผ ๋ค์ด 100๊ณผ ๊ฐ์ ํฐ ์์ ํฉํ ๋ฆฌ์ผ์ ๊ณ์ฐํด์ผ ํ๋ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด ๋ณด์ธ์. ํ์ค Number ํ์
์ ์ฌ์ฉํ๋ฉด ์ ๋ฐ๋ ์์ค์ด ๋ฐ์ํฉ๋๋ค. BigInt๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๊ฐ์ ์ ํํ๊ฒ ๊ณ์ฐํ๊ณ ํํํ ์ ์์ต๋๋ค:
function factorial(n) {
let result = 1n;
for (let i = 2n; i <= n; i++) {
result *= i;
}
return result;
}
console.log(factorial(100n)); // Output: 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000n
์๋ฐ์คํฌ๋ฆฝํธ์์์ ์ซ์ ๋ฉ๋ชจ๋ฆฌ ํํ
BigInt์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ์ดํด๋ณด๊ธฐ ์ ์, ํ์ค ์๋ฐ์คํฌ๋ฆฝํธ ์ซ์๊ฐ ์ด๋ป๊ฒ ํํ๋๋์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Number ํ์
์ ๋ฐฐ์ ๋ฐ๋ 64๋นํธ ์ด์ง ํ์(IEEE 754)์ ์ฌ์ฉํฉ๋๋ค. ์ด ํ์์ ๋ถํธ, ์ง์, ๊ฐ์(๋๋ ๋ถ์)์ ๋นํธ๋ฅผ ํ ๋นํฉ๋๋ค. ์ด๊ฒ์ด ๊ด๋ฒ์ํ ์ซ์๋ฅผ ํํํ ์ ์๊ฒ ํด์ฃผ์ง๋ง, ๋งค์ฐ ํฐ ์ ์์ ๋ํ ์ ๋ฐ๋์๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
๋ฐ๋ฉด์ BigInt๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ๊ณ ์ ๋ ๋นํธ ์์ ์ ํ๋์ง ์์ต๋๋ค. ๋์ , ์์๋ก ํฐ ์ ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๊ฐ๋ณ ๊ธธ์ด ํํ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ์ ์ฐ์ฑ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ์ฑ๋ฅ๊ณผ ๊ด๋ จ๋ ์์ฒด์ ์ธ ๊ณผ์ ๋ฅผ ๋๋ฐํฉ๋๋ค.
BigInt ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์ ๋ฐ ์ ์ฅ์ ์ต์ ํ
BigInt์ ๊ตฌ์ฒด์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ, ์ฌ๋ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง(์: V8, SpiderMonkey, JavaScriptCore)๋ง๋ค ๋ค๋ฆ
๋๋ค. ๊ทธ๋ฌ๋ ํจ์จ์ ์ธ ์ ์ฅ์์ ํต์ฌ ์์น์ ์ผ๊ด๋๊ฒ ์ ์ง๋ฉ๋๋ค. ๋ค์์ ์ผ๋ฐ์ ์ผ๋ก BigInt๊ฐ ์ ์ฅ๋๋ ๋ฐฉ์์ ๋ํ ๊ฐ์์
๋๋ค:
1. ๊ฐ๋ณ ๊ธธ์ด ํํ
BigInt ๊ฐ์ ๊ณ ์ ํฌ๊ธฐ ์ ์๋ก ์ ์ฅ๋์ง ์์ต๋๋ค. ๋์ , ์ข
์ข
32๋นํธ ๋๋ 64๋นํธ ์๋์ ๊ฐ์ ๋ ์์ ๋จ์์ ์ํ์ค๋ก ํํ๋ฉ๋๋ค. ์ฌ์ฉ๋๋ ์๋์ ์๋ ์ซ์์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์ด๋ฅผ ํตํด BigInt๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ์ํด์๋ง ์ ํ๋๋ ๋ชจ๋ ํฌ๊ธฐ์ ์ ์๋ฅผ ๋ํ๋ผ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, 12345678901234567890n์ด๋ผ๋ ์ซ์๋ฅผ ์๊ฐํด ๋ด
์๋ค. ์ด ์ซ์๋ฅผ ์ ํํ๊ฒ ํํํ๋ ค๋ฉด 64๋นํธ ์ด์์ด ํ์ํฉ๋๋ค. BigInt ํํ์ ์ด๋ฅผ ์ฌ๋ฌ ๊ฐ์ 32๋นํธ ๋๋ 64๋นํธ ์ธ๊ทธ๋จผํธ๋ก ๋๋๊ณ , ๊ฐ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ณ๋์ ์๋๋ก ์ ์ฅํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด๋ฌํ ์ธ๊ทธ๋จผํธ๋ฅผ ๊ด๋ฆฌํ์ฌ ์ฐ์ ์ฐ์ฐ์ ์ํํฉ๋๋ค.
2. ๋ถํธ ํํ
BigInt์ ๋ถํธ(์์ ๋๋ ์์)๋ ์ ์ฅ๋์ด์ผ ํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก BigInt์ ๋ฉํ๋ฐ์ดํฐ ๋ด์ ๋จ์ผ ๋นํธ๋ ๊ฐ์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. ์ ํํ ๋ฐฉ๋ฒ์ ํน์ ๊ตฌํ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค.
3. ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
BigInt๋ ์์๋ก ์ปค์ง ์ ์์ผ๋ฏ๋ก ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ํ์์ ์
๋๋ค. BigInt๊ฐ ๋ ํฐ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ๋ ๋ง์ ๊ณต๊ฐ์ด ํ์ํ ๋(์: ๊ณฑ์
ํ), ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํ์์ ๋ฐ๋ผ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํฉ๋๋ค. ์ด ๋์ ํ ๋น์ ์์ง์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค.
4. ์ ์ฅ ํจ์จ์ฑ ๊ธฐ์
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ BigInt์ ์ ์ฅ ๋ฐ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ๋ค์ํ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ์ ๊ทํ(Normalization): ์ ํ 0์ ์ ๊ฑฐํฉ๋๋ค.
BigInt๊ฐ ์๋์ ์ํ์ค๋ก ํํ๋๊ณ ์ผ๋ถ ์ ํ ์๋๊ฐ 0์ธ ๊ฒฝ์ฐ, ์ด ์๋๋ฅผ ์ ๊ฑฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์์ต๋๋ค. - ๊ณต์ (Sharing): ์ฌ๋ฌ
BigInt๊ฐ ๋์ผํ ๊ฐ์ ๊ฐ๋ ๊ฒฝ์ฐ, ์์ง์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ค์ด๊ธฐ ์ํด ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ํํ์ ๊ณต์ ํ ์ ์์ต๋๋ค. ์ด๋ ๋ฌธ์์ด ์ธํฐ๋๊ณผ ์ ์ฌํ์ง๋ง ์ซ์ ๊ฐ์ ๋ํ ๊ฒ์ ๋๋ค. - ์ฐ๊ธฐ ์ ๋ณต์ฌ(Copy-on-Write):
BigInt๊ฐ ๋ณต์ฌ๋ ๋, ์์ง์ ์ฆ์ ์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ง ์์ ์ ์์ต๋๋ค. ๋์ , ๋ณต์ฌ๋ณธ ์ค ํ๋๊ฐ ์์ ๋ ๋๊น์ง ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณต์ ๋๋ ์ฐ๊ธฐ ์ ๋ณต์ฌ ์ ๋ต์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ๋ณต์ฌ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
5. ๊ฐ๋น์ง ์ปฌ๋ ์
BigInt๋ ๋์ ์ผ๋ก ํ ๋น๋๋ฏ๋ก, ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ ๋ฐ ๊ฐ๋น์ง ์ปฌ๋ ์
์ด ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๋ ์ด์ ๋๋ฌํ ์ ์๋ BigInt ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ ๊ด๋ จ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ํจ์จ์ ์ผ๋ก ๊ณ์ ์๋ํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
๊ตฌํ ์์ (๊ฐ๋ ์ )
์ค์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋ณต์กํ๊ณ ์์ง์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง, ์์ฌ ์ฝ๋์ ๊ฐ๋จํ ์์๋ฅผ ํตํด ํต์ฌ ๊ฐ๋ ์ ์ค๋ช ํ ์ ์์ต๋๋ค:
class BigInt {
constructor(value) {
this.sign = value < 0 ? -1 : 1;
this.words = []; // 32๋นํธ ๋๋ 64๋นํธ ์๋์ ๋ฐฐ์ด
// ๊ฐ์ ์๋๋ก ๋ณํํ์ฌ this.words์ ์ ์ฅ
// (์ด ๋ถ๋ถ์ ๊ตฌํ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ฌ๋ผ์ง)
}
add(other) {
// words ๋ฐฐ์ด์ ์ฌ์ฉํ ๋ง์
๋ก์ง ๊ตฌํ
// (์๋ ๊ฐ์ ์ฌ๋ฆผ ์ฒ๋ฆฌ)
}
toString() {
// words ๋ฐฐ์ด์ ๋ค์ ๋ฌธ์์ด ํํ์ผ๋ก ๋ณํ
}
}
์ด ์์ฌ ์ฝ๋๋ ๋ถํธ์ ์ซ์์ ํฌ๊ธฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์๋ ๋ฐฐ์ด์ ํฌํจํ์ฌ BigInt ํด๋์ค์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค. add ๋ฉ์๋๋ ์๋๋ฅผ ๋ฐ๋ณตํ๋ฉด์ ๊ทธ ์ฌ์ด์ ์ฌ๋ฆผ์ ์ฒ๋ฆฌํ์ฌ ๋ง์
์ ์ํํฉ๋๋ค. toString ๋ฉ์๋๋ ์๋๋ฅผ ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ฌธ์์ด ํํ์ผ๋ก ๋ค์ ๋ณํํฉ๋๋ค.
์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ
BigInt๋ ํฐ ์ ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๊ทธ ์ฑ๋ฅ ์ํฅ์ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋:
BigInt๋ ์ผ๋ฐ์ ์ผ๋ก ํ์คNumber๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ฉฐ, ํนํ ๋งค์ฐ ํฐ ๊ฐ์ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. - ๊ณ์ฐ ๋น์ฉ:
BigInt์ ๋ํ ์ฐ์ ์ฐ์ฐ์ ๋ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํฌํจํ๊ธฐ ๋๋ฌธ์Number์ ๋ํ ์ฐ์ฐ๋ณด๋ค ๋๋ฆด ์ ์์ต๋๋ค. - ํ์
๋ณํ:
BigInt์Number์ฌ์ด์ ๋ณํ์ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ผ๋ฉฐ,Numberํ์ ์ดBigInt๊ฐ์ ์ ํํ๊ฒ ํํํ ์ ์๋ ๊ฒฝ์ฐ ์ ๋ฐ๋ ์์ค๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
๋ฐ๋ผ์ Number ํ์
์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ์ซ์๋ฅผ ์ฒ๋ฆฌํด์ผ ํ ๋๋ง BigInt๋ฅผ ์ ์คํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฑ๋ฅ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ, BigInt ์ฌ์ฉ์ ์ํฅ์ ํ๊ฐํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ ์คํ๊ฒ ๋ฒค์น๋งํนํด์ผ ํฉ๋๋ค.
์ฌ์ฉ ์ฌ๋ก ๋ฐ ์์
BigInt๋ ํฐ ์ ์ ์ฐ์ฐ์ด ํ์ํ ๋ค์ํ ์๋๋ฆฌ์ค์์ ํ์์ ์
๋๋ค. ๋ช ๊ฐ์ง ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ์ํธํ
์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ข
์ข
๋งค์ฐ ํฐ ์ ์๋ฅผ ํฌํจํฉ๋๋ค. BigInt๋ ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๊ณ ํจ์จ์ ์ผ๋ก ๊ตฌํํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, RSA ์ํธํ๋ ํฐ ์์๋ฅผ ์ฌ์ฉํ ๋ชจ๋๋ฌ ์ฐ์ฐ์ ์์กดํฉ๋๋ค. BigInt๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์๊ฐ ๋ธ๋ผ์ฐ์ ๋ Node.js์ ๊ฐ์ ์๋ฒ ์ธก ์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์ ์ง์ RSA ๋ฐ ๊ธฐํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ์ ์๊ฒ ํด์ค๋๋ค.
// ์์ (๊ฐ๋จํ RSA - ํ๋ก๋์
์ฉ ์๋)
function encrypt(message, publicKey, modulus) {
let encrypted = 1n;
let base = BigInt(message);
let exponent = BigInt(publicKey);
while (exponent > 0n) {
if (exponent % 2n === 1n) {
encrypted = (encrypted * base) % modulus;
}
base = (base * base) % modulus;
exponent /= 2n;
}
return encrypted;
}
2. ๊ธ์ต ๊ณ์ฐ
๊ธ์ต ์ ํ๋ฆฌ์ผ์ด์
์ ํนํ ํตํ, ์ด์์จ ๋๋ ๋๊ท๋ชจ ๊ฑฐ๋๋ฅผ ๋ค๋ฃฐ ๋ ํฐ ์ซ์๋ก ์ ํํ ๊ณ์ฐ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. BigInt๋ ์ด๋ฌํ ๊ณ์ฐ์์ ์ ํ์ฑ์ ๋ณด์ฅํ์ฌ ๋ถ๋ ์์์ ์ซ์๋ก ๋ฐ์ํ ์ ์๋ ๋ฐ์ฌ๋ฆผ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
// ์์: ๋ณต๋ฆฌ ๊ณ์ฐ
function compoundInterest(principal, rate, time, compoundingFrequency) {
let principalBigInt = BigInt(principal * 100); // ๋ถ๋ ์์์ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ์ผํธ๋ก ๋ณํ
let rateBigInt = BigInt(rate * 1000000); // ๋น์จ์ ๋ถ์ * 1,000,000์ผ๋ก ํํ
let frequencyBigInt = BigInt(compoundingFrequency);
let timeBigInt = BigInt(time);
let amount = principalBigInt * ((1000000n + (rateBigInt / frequencyBigInt)) ** (frequencyBigInt * timeBigInt)) / (1000000n ** (frequencyBigInt * timeBigInt));
return Number(amount) / 100;
}
console.log(compoundInterest(1000, 0.05, 10, 12));
3. ๊ณผํ ์๋ฎฌ๋ ์ด์
๋ฌผ๋ฆฌํ์ด๋ ์ฒ๋ฌธํ๊ณผ ๊ฐ์ ๊ณผํ ์๋ฎฌ๋ ์ด์
์ ์ข
์ข
๊ทน๋๋ก ํฌ๊ฑฐ๋ ์์ ์ซ์๋ฅผ ํฌํจํฉ๋๋ค. BigInt๋ ์ด๋ฌํ ์ซ์๋ฅผ ์ ํํ๊ฒ ํํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ด ๋ ์ ๋ฐํ ์๋ฎฌ๋ ์ด์
์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
4. ๊ณ ์ ์๋ณ์
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ๋ถ์ฐ ์์คํ
์ ์ฌ๋ฌ ์์คํ
์ ๊ฑธ์ณ ๊ณ ์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ข
์ข
ํฐ ๊ณ ์ ์๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. BigInt๋ ์ด๋ฌํ ์๋ณ์๋ฅผ ์์ฑํ๊ณ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋์ด ์ถฉ๋์ ํผํ๊ณ ํ์ฅ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ด์ค๋ถ์ด๋ X(์ด์ ํธ์ํฐ)์ ๊ฐ์ ์์
๋ฏธ๋์ด ํ๋ซํผ์ ์ฌ์ฉ์ ๊ณ์ ๊ณผ ๊ฒ์๋ฌผ์ ์๋ณํ๊ธฐ ์ํด ํฐ ์ ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ID๋ ์ข
์ข
์๋ฐ์คํฌ๋ฆฝํธ์ `Number` ํ์
์ผ๋ก ํํํ ์ ์๋ ์ต๋ ์์ ์ ์๋ฅผ ์ด๊ณผํฉ๋๋ค.
BigInt ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
BigInt๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ํ์ํ ๋๋ง
BigInt์ฌ์ฉ:Numberํ์ ์ผ๋ก ์ ํํ๊ฒ ์ํํ ์ ์๋ ๊ณ์ฐ์๋BigInt์ฌ์ฉ์ ํผํ์ญ์์ค. - ์ฑ๋ฅ์ ์ ์:
BigInt๊ฐ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ํ๊ฐํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ๋ฒค์น๋งํนํ์ญ์์ค. - ํ์
๋ณํ์ ์ ์คํ๊ฒ ์ฒ๋ฆฌ:
BigInt์Number์ฌ์ด๋ฅผ ๋ณํํ ๋ ๋ฐ์ํ ์ ์๋ ์ ๋ฐ๋ ์์ค์ ์ ์ํ์ญ์์ค. BigInt๋ฆฌํฐ๋ด ์ฌ์ฉ:n์ ๋ฏธ์ฌ๋ฅผ ์ฌ์ฉํ์ฌBigInt๋ฆฌํฐ๋ด์ ๋ง๋์ญ์์ค(์:123n).- ์ฐ์ฐ์ ๋์ ์ดํด: ํ์ค ์ฐ์ ์ฐ์ฐ์(
+,-,*,/,%)๋BigInt์Number์์ ๋ค๋ฅด๊ฒ ์๋ํ๋ค๋ ์ ์ ์ธ์งํ์ญ์์ค.BigInt๋ ๋ค๋ฅธBigInt๋ ๋ฆฌํฐ๋ด๊ณผ์ ์ฐ์ฐ๋ง ์ง์ํ๋ฉฐ, ํผํฉ๋ ํ์ ๊ณผ๋ ์ฐ์ฐ์ ์ง์ํ์ง ์์ต๋๋ค.
ํธํ์ฑ ๋ฐ ๋ธ๋ผ์ฐ์ ์ง์
BigInt๋ ๋ชจ๋ ์ต์ ๋ธ๋ผ์ฐ์ ์ Node.js์์ ์ง์๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ ์ง์ํ์ง ์์ ์ ์์ต๋๋ค. ๊ธฐ๋ฅ ๊ฐ์ง๋ฅผ ์ฌ์ฉํ์ฌ BigInt๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธํ ์ ์์ต๋๋ค:
if (typeof BigInt !== 'undefined') {
// BigInt๊ฐ ์ง์๋จ
const largeNumber = 12345678901234567890n;
console.log(largeNumber + 1n);
} else {
// BigInt๊ฐ ์ง์๋์ง ์์
console.log('BigInt is not supported in this browser.');
}
๊ตฌํ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ, ํด๋ฆฌํ์ ์ฌ์ฉํ์ฌ BigInt ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํด๋ฆฌํ์ ๋ค์ดํฐ๋ธ ๊ตฌํ์ ๋นํด ์ฑ๋ฅ ์ ํ์ด ์์ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
BigInt๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ๋ ฅํ ์ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก, ๊ฐ๋ฐ์๊ฐ ์์๋ก ํฐ ์ ์๋ฅผ ์ ๋ฐํ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค. ๊ทธ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์๊ณผ ์ ์ฅ์ ์ต์ ํ ๊ธฐ์ ์ ์ดํดํ๋ ๊ฒ์ ํจ์จ์ ์ด๊ณ ์ฑ๋ฅ์ด ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ค์ํฉ๋๋ค. BigInt๋ฅผ ์ ์คํ๊ฒ ์ฌ์ฉํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด, ์ํธํ, ๊ธ์ต, ๊ณผํ ์๋ฎฌ๋ ์ด์
๋ฐ ํฐ ์ ์ ์ฐ์ฐ์ด ํ์์ ์ธ ๋ค๋ฅธ ์ฌ๋ฌ ๋ถ์ผ์ ๊ด๋ฒ์ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ทธ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ BigInt๋ ๋ณต์กํ๊ณ ๊น๋ค๋ก์ด ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฐ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์
๋๋ค.
๋ ์์๋ณด๊ธฐ
- ECMAScript ๋ช
์ธ์:
BigInt์ ๋์๊ณผ ์๋ฏธ์ ๋ํ ์์ธํ ์ดํด๋ฅผ ์ํด ๊ณต์ ECMAScript ๋ช ์ธ์๋ฅผ ์ฝ์ด๋ณด์ญ์์ค. - ์๋ฐ์คํฌ๋ฆฝํธ ์์ง ๋ด๋ถ ๊ตฌ์กฐ: V8, SpiderMonkey, JavaScriptCore์ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์์ค ์ฝ๋๋ฅผ ํ์ํ์ฌ
BigInt์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋ํด ๋ ๊น์ด ์์๋ณด์ญ์์ค. - ์ฑ๋ฅ ๋ฒค์น๋งํน: ๋ฒค์น๋งํน ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์๋๋ฆฌ์ค์์
BigInt์์ ์ ์ฑ๋ฅ์ ์ธก์ ํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์ต์ ํํ์ญ์์ค. - ์ปค๋ฎค๋ํฐ ํฌ๋ผ: ํฌ๋ผ ๋ฐ ์จ๋ผ์ธ ๋ฆฌ์์ค์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ปค๋ฎค๋ํฐ์ ๊ต๋ฅํ์ฌ
BigInt์ ๊ดํ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ ๊ฒฝํ๊ณผ ํต์ฐฐ๋ ฅ์ ๋ฐฐ์ฐ์ญ์์ค.