(1) Math.random() v.s. Random
About
Java์์ ๋์๋ฅผ ๋ฐ์์์ผ๋ณด์. ์ ์ผ ์ฌ์ด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
java.lang.Math
์ static ๋ฉ์๋random()
java.util.Random
ํด๋์ค
์ฌ๊ธฐ์ ๋ฐ์๋๋ ๋์๋ฅผ ์์ฌ๋์(Pseudorandom Number)๋ผ๊ณ ํ๋๋ฐ, ๋์๋ ์๋์ง๋ง ๋์๋ก ์ทจ๊ธ์ด ๊ฐ๋ฅํ ์์ด์ ์ง์นญํ๋ค.
Note: ๋์๋ฅผ ๋ฐ์์ํค๋ ค๋ฉด ์ด๊ธฐ seed ๊ฐ์ด ํ์ํ๋ฉฐ, ํด๋น seed๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์๋ฅผ ๋ฐ์์ํจ๋ค. ๋์ผํ seed๋ก ๋์๋ฅผ ์์ฑํ๋ฉด ๋ค์์ ์คํํ ๋๋ ๋๊ฐ์ ๋์๊ฐ ์์ฑ๋๋ค.
java.lang.Math.random()
Math
๋ java.lang
ํจํค์ง์ ์ํด ์์ด ๋ณ๋๋ก importํ ํ์๊ฐ ์๋ค.
Math.random()
๋ฅผ ํธ์ถํ๋ ๊ฒ์ผ๋ก ๋์๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ํ์ฌ ์๊ฐ์ seed๋ก ์ฌ์ฉํ๋ค.
๋ฒ์๋ 0.0 โค Math.random() < 1.0
์ด๋ค.
์ ์ ๋ง๋ค๊ธฐ
์ ์ ํ์ ์ ๋์๊ฐ ํ์ํ ๋๋ ์๋ค.
์๋ฅผ ๋ค์ด 0 ์ด์ 9 ์ดํ์ ๋์๊ฐ ํ์ํ๋ค๋ฉด 10์ ๊ณฑํด์ฃผ๊ณ int
ํ์
์ผ๋ก ํ๋ณํํ๋ฉด ๋๋ค.
java.util.Random ํด๋์ค
Random
ํด๋์ค๋ java.util
ํจํค์ง์ ์ํด์์ผ๋ฏ๋ก importํด์ผํ๋ค.
Math.random()
๊ณผ ๋ฌ๋ฆฌ ๋จผ์ Random
๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค.seed๋ฅผ ์ค์ ํ ์๋ ์๋ค. ์์ฑ์์ seed๋ฅผ ์ ๋ฌํ๊ฑฐ๋,
setSeed()
๋ฉ์๋๋ก ์ค์ ํ ์ ์๋ค.๋ค์ํ ๋์ ๋ฐ์ ๋ฉ์๋๋ฅผ ์ง์ํ๋ค.
nextBoolean()
,nextInt()
,nextLong()
,nextInt(int n)
,nextFloat()
,nextDouble()
,nextGaussian()
๊ทธ๋ผ ๋ญ ์จ์ผ๋ ๊น?
Stack Overflow์ ํ ๊ธ์ ๋ฐ๋ฅด๋ฉด Random.nextInt(n)
๊ฐ Math.random() * n
๋ณด๋ค ๋ ํจ์จ์ ์ด๊ณ ๋ ํธํฅ์ (biased)์ด๋ผ๊ณ ํ๋ค.
Math.random()
์ ๋ด๋ถ์ ์ผ๋กRandom.nextDouble()
์ ์ฌ์ฉํ๋ค.Random.nextDouble()
์Random.next()
ํจ์๋ฅผ ๋ ๋ฒ ํธ์ถํด์ ๊ฐ์๋ถ(mantissa)์ ๊ท ์ผํ๊ฒ ๋ถํฌ๋ ๋นํธ๋ฅผ ๊ฐ๋ double์ ์์ฑํ๋ฏ๋ก 0๋ถํฐ 1 - 2^(-53) ๋ฒ์์์ ๋ ๊ท ์ผํ๊ฒ ๊ฐ์ ๊ฐ์ ธ์จ๋ค๊ณ ํ๋ค.
Random.nextInt(n)
์Random.next()
๋ฅผ ํ๊ท 2๋ฒ ๋ฏธ๋ง ์ฌ์ฉํ๋ค. ํ ๋ฒ ํธ์ถํ๊ณ , ๋ง์ฝ ๊ฐ์ดMAX_INT
๋ณด๋ค ์์ ๊ฐ์ฅ ํฐ n์ ๋ฐฐ์๋ณด๋ค ํฌ๋ค๋ฉด ๋ค์ ์๋ํ๊ณ , ์๋๋ผ๋ฉด๊ฐ mod n
์ ๋ฐํํ๋ค. (์ด๋ ๊ฒ ํจ์ผ๋ก์จMAX_INT
๋ณด๋ค ์์ ๊ฐ์ฅ ํฐ n์ ๋ฐฐ์๋ณด๋ค ํฐ ๊ฐ๋ค์ด ๋์ค์ง ์๋๋ก ํ์ฌ, ๊ฐ์ ํธํฅ์ฑ์ ์ค์ธ๋ค) ๊ทธ๋์ 0๋ถํฐ n-1์ ๋ฒ์์์ ๊ท ์ผํ๊ฒ ๋ถํฌ๋ ๊ฐ์ ๋ฐํํ๋ค....
Math.random()์ ์ฝ ๋ ๋ฐฐ์ ์ฒ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ค.
๊ฒฐ๋ก ๋ง ๋ฐ์ ธ๋ณด๋ฉด Math.random()
๋ณด๋ค Random.nextInt()
๊ฐ ๋ ํจ์จ์ ์ด๋ผ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ์ค์ํ ์ฐจ์ด์ ์ด ์๋๋ฐ Random.nextInt(n)
์๋ seed ๊ฐ์ ์ ๋ฌํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๋์ผํ seed๋ฅผ ๊ฐ์ง Random
๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ์์ฑํ ์ ์๋ค. Math.random()
์ผ๋ก๋ ๋ถ๊ฐ๋ฅํ๋ค.
More on the matter
REF
Last updated
Was this helpful?