Responsive Advertisement

JavaScript์—์„œ ๋‚œ์ˆ˜ ์ƒ์„ฑํ•˜๊ธฐ: Math.random() ์™„๋ฒฝ ๊ฐ€์ด๋“œ

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 ์‚ฌ์ด์˜ ๋‚œ์ˆ˜ ์ƒ์„ฑ๋ถ€ํ„ฐ, ํŠน์ • ๋ฒ”์œ„ ๋‚ด์—์„œ ์ •์ˆ˜๋‚˜ ์†Œ์ˆ˜์  ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚œ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ฒŒ์ž„์ด๋‚˜ ๋ฌด์ž‘์œ„ ์š”์†Œ๋ฅผ ํฌํ•จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋”์šฑ ํฅ๋ฏธ๋กญ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋” ๊ฐ•๋ ฅํ•œ ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.

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