JavaScript์์ ๋์(๋๋ค ์ซ์)๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ฒ์, ๋ก๋ ๋ฒํธ ์์ฑ๊ธฐ, ์ํธ ์์ฑ๊ธฐ ๋ฑ ์ฌ๋ฌ ์ํฉ์์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. JavaScript์์๋ Math.random() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ Math.random()์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ๋ถํฐ ๋ค์ํ ๋์ ์์ฑ ๋ฐฉ๋ฒ๊น์ง ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค.
JavaScript์์ Math.random() ์ฌ์ฉํ๊ธฐ
Math.random()
๋ฉ์๋๋ 0(ํฌํจ)๊ณผ 1(์ ์ธ) ์ฌ์ด์ ๋ถ๋ ์์์ ๋์๋ฅผ ๋ฐํํฉ๋๋ค. ์ฆ, 0๋ถํฐ 1 ์ฌ์ด์ ๊ฐ์ ๋๋คํ๊ฒ ์์ฑํ๋ ๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
// 0๊ณผ 1 ์ฌ์ด์ ๋์ ์์ฑ
const randomNum = Math.random();
console.log(randomNum); // ์: 0.567432154
์ด ๋ฉ์๋๋ฅผ ํตํด ์ป์ ๋์๋ ํญ์ 0 ์ด์ 1 ๋ฏธ๋ง์ ๊ฐ์ด ๋ฐํ๋๋ฏ๋ก, ์ด๋ฅผ ํ์ฉํด ๋ค์ํ ๋ฒ์์ ๋์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
ํน์ ๋ฒ์ ๋ด์์ ๋์ ์์ฑํ๊ธฐ
Math.random()
์ 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ ๋ฐํํ์ง๋ง, ์ค์ ๋ก ์ฐ๋ฆฌ๋ ํน์ ๋ฒ์ ๋ด์ ๋์๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฅผ ์ํด ์ํ๋ ๋ฒ์์ ๋ง์ถฐ ๋์๋ฅผ ๋ณํํ ์ ์์ต๋๋ค.
1. 0 ์ด์ N ๋ฏธ๋ง์ ๋์ ์์ฑ
์ด๋ค ์ซ์ N
๋ฏธ๋ง์ ๋์๋ฅผ ์์ฑํ๋ ค๋ฉด, Math.random()
์ N
์ ๊ณฑํ๋ฉด ๋ฉ๋๋ค.
// 0 ์ด์ 10 ๋ฏธ๋ง์ ๋์ ์์ฑ
const randomNum = Math.random() * 10;
console.log(randomNum); // ์: 7.23451234
์ ์ฝ๋์์๋ 0 ์ด์ 10 ๋ฏธ๋ง์ ์์์ ๋์๋ฅผ ์์ฑํฉ๋๋ค. N
์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์ํ๋ ์ํ๊ฐ ๋ฏธ๋ง์ ๋์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
2. 0 ์ด์ N ์ดํ์ ์ ์ ๋์ ์์ฑ
0 ์ด์ ํน์ ์ซ์ N
์ดํ์ ์ ์๋ฅผ ์์ฑํ๋ ค๋ฉด Math.floor()
๋๋ Math.ceil()
์ ํจ๊ป ์ฌ์ฉํ์ฌ ์์์ ์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
// 0 ์ด์ 10 ์ดํ์ ์ ์ ๋์ ์์ฑ
const randomInt = Math.floor(Math.random() * 11); // 0๋ถํฐ 10๊น์ง
console.log(randomInt); // ์: 8
Math.floor()
๋ฅผ ์ฌ์ฉํ๋ฉด 0๋ถํฐ N
๊น์ง์ ์ ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ N + 1
์ ๊ณฑํด ์ํ๊ฐ์ ํฌํจํ ์ ์ ๋์๋ฅผ ์์ฑํฉ๋๋ค.
3. ํน์ ๋ฒ์ ๋ด์์ ์ ์ ๋์ ์์ฑ
๋ง์ฝ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ง์ ํด ๋์๋ฅผ ์์ฑํ๊ณ ์ถ๋ค๋ฉด, ์๋์ ๊ฐ์ ๊ณต์์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
// ์ต์๊ฐ(min)๊ณผ ์ต๋๊ฐ(max) ์ฌ์ด์ ๋์ ์์ฑ
const min = 5;
const max = 15;
const randomInt = Math.floor(Math.random() * (max - min + 1)) + min;
console.log(randomInt); // ์: 7
์ ๊ณต์์ ์ฌ์ฉํ๋ฉด min
๋ถํฐ max
์ฌ์ด์ ๋์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๊ณต์์ ๋ฒ์ ๋ด์์ ๊ท ๋ฑํ๊ฒ ๋์๋ฅผ ์์ฑํฉ๋๋ค.
์ค์ํ์์ ๋์ ์์ฑ ์์ฉํ๊ธฐ
Math.random()
์ ํ์ฉํ๋ฉด ๋ค์ํ ์์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋์๋ ๊ฐ๋จํ ๊ฒ์์์๋ถํฐ ๋ณต์กํ ๋ณด์ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฅด๊ธฐ๊น์ง ํญ๋๊ฒ ํ์ฉ๋ฉ๋๋ค.
1. ์ฃผ์ฌ์ ๊ฐ ์์ฑํ๊ธฐ
์ฃผ์ฌ์๋ 1๋ถํฐ 6๊น์ง์ ์ ์ ๊ฐ์ ๋ฐํํ๋ ๋๊ตฌ์
๋๋ค. ์ด๋ฅผ Math.random()
์ ์ด์ฉํด ๊ตฌํํ ์ ์์ต๋๋ค.
// 1๋ถํฐ 6๊น์ง์ ์ฃผ์ฌ์ ๊ฐ ์์ฑ
const diceRoll = Math.floor(Math.random() * 6) + 1;
console.log(diceRoll); // ์: 4
์ ์ฝ๋์์๋ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆด ๋ ๋์ฌ ์ ์๋ 1๋ถํฐ 6๊น์ง์ ๋์๋ฅผ ์์ฑํฉ๋๋ค.
2. ๋์ ๋์ง๊ธฐ ๊ฒฐ๊ณผ ์์ฑํ๊ธฐ
๋์ ๋์ง๊ธฐ๋ 50% ํ๋ฅ ๋ก ์๋ฉด๊ณผ ๋ท๋ฉด ์ค ํ๋๊ฐ ๋์ค๋ ๊ฐ๋จํ ๋์ ์์ฑ ์์ฉ์
๋๋ค. ์ด๋ฅผ Math.random()
์ ์ด์ฉํด ๊ตฌํํ ์ ์์ต๋๋ค.
// ๋์ ๋์ง๊ธฐ ๊ฒฐ๊ณผ
const coinFlip = Math.random() < 0.5 ? 'Heads' : 'Tails';
console.log(coinFlip); // ์: "Heads"
์ ์ฝ๋์์๋ 50% ํ๋ฅ ๋ก 'Heads'(์๋ฉด) ๋๋ 'Tails'(๋ท๋ฉด) ๊ฐ์ ๋ฐํํฉ๋๋ค.
3. ๋๋ค ๋ฐฐ์ด ์์ ์ ํํ๊ธฐ
๋ฐฐ์ด์์ ๋๋ค์ผ๋ก ์์๋ฅผ ์ ํํด์ผ ํ ๋๋ Math.random()
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
// ๋๋ค ๋ฐฐ์ด ์์ ์ ํ
const colors = ['red', 'green', 'blue', 'yellow'];
const randomColor = colors[Math.floor(Math.random() * colors.length)];
console.log(randomColor); // ์: "blue"
์ ์ฝ๋์์๋ ๋ฐฐ์ด colors
์์ ์์์ ์์์ ์ ํํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ฐฐ์ด์ด๋ ๋ชฉ๋ก์์ ๋๋คํ๊ฒ ์์๋ฅผ ์ ํํ ๋ ์ ์ฉํฉ๋๋ค.
๋ณด์ ๊ด๋ จ ๋์ ์์ฑ ์ ์ฃผ์์
Math.random()
์ ์์ฌ ๋์ ์์ฑ ์๊ณ ๋ฆฌ์ฆ(Pseudo-Random Number Generator, PRNG)์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ณด์์ด ์ค์ํ ๊ฒฝ์ฐ์๋ Math.random()
์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ํธํ๋ ๋ณด์์ด ์ค์ํ ์์
์์๋ ๋ ๊ฐ๋ ฅํ ๋์ ์์ฑ ๋ฉ์๋๊ฐ ํ์ํ๋ฉฐ, Node.js ํ๊ฒฝ์์๋ crypto
๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
// Node.js์์ ๋ณด์ ๋์ ์์ฑ (crypto ๋ชจ๋ ์ฌ์ฉ)
const crypto = require('crypto');
const secureRandom = crypto.randomInt(0, 100);
console.log(secureRandom); // ๋ณด์ ๋์
์ด ๋ฐฉ๋ฒ์ ๋ณด์ ์์ค์ด ๋์ ๋์๋ฅผ ์์ฑํ ์ ์์ด, ์ํธํ ๋ฑ์ ์์ ์ ์ ํฉํฉ๋๋ค.
๊ฒฐ๋ก
JavaScript์ Math.random()
๋ฉ์๋๋ ๋ค์ํ ์ํฉ์์ ๋์๋ฅผ ์์ฑํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ธ 0~1 ์ฌ์ด์ ๋์ ์์ฑ๋ถํฐ, ํน์ ๋ฒ์ ๋ด์์ ์ ์๋ ์์์ ๋์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ๊น์ง ๋ค์ํ๊ฒ ํ์ฉํ ์ ์์ต๋๋ค. ๋์๋ฅผ ์ด์ฉํด ๊ฒ์์ด๋ ๋ฌด์์ ์์๋ฅผ ํฌํจํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋์ฑ ํฅ๋ฏธ๋กญ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ํ์ง๋ง ๋ณด์์ด ์ค์ํ ๊ฒฝ์ฐ์๋ ๋ ๊ฐ๋ ฅํ ๋์ ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค.
๋๊ธ ์ฐ๊ธฐ