본문 바로가기
JAVA BASE/lang & util

09. [자바] Random클래스

by staticClass 2020. 12. 27.

Random클래스?

무작위의 수를 얻기 위한 방법을 생각하면 먼저 Math.Random()이 떠오른다.
이 외에도 Random클래스를 이용하여 무작위의 수를 얻을 수 있다.

double randomNum = Math.random();
double randomNum = new Random().nextDouble();    // 위의 문장과 동일

int num = (int)(Math.random() * 10) + 1;  // Math.random()으로 1~10의 정수를 얻기 위한 코드
int num = new Random().nextInt(10) + 1;   // Random클래스로 1~10의 정수를 얻기 위한 코드

Math.random과 Random클래스의 차이점

Math.random은 언제 어디서나 실행을하면 항상 규칙성이 없이 다른 수가 나온다.

하지만 Random클래스를 몇번 실행해 보면 어느 반복되는 것을 느낄수 있다
그 이유는 랜덤함수라 하더라도 일정한 규칙성을 가지기 때문이다.

하지만 Random클래스는 이 시드값을 설정해 줄 수 있기 때문에 랜덤 함수에서
같은 수가 반복되어 나오는걸 방지 할수 있다.
그래서 seed 값을 중간에 변경해 주어서 반복되는 것을 막고자 할때 많이 사용되어 진다.

seed값은 처음 생성자에 넣어서 만들어 줄 수도 있고

//생성자
Random()          // System.currentTimeMillis()을 seed로 이용하는 Random인스턴스 생성
Random(long seed) // 내가 원하는 시드 설정 가능.

코드의 흐름 중간에도 메소드를 이용해 seed값을 변경해 줄 수 있다.

// 메소드
setSeed(long seed)

그리고 이 시드 값은 변경될 때마다 계속해서 변화가 이루어져야 함으로
현재시간을 천분의 1초단위로 변환해서 반환해주는 System.currentTimeMillis()를 사용한다.

setSeed(System.currentTimeMillis());

Random클래스의 생성자와 메서드

메서드 설명
Random() System.현재시간을 시드로 이용하는 Random인스턴스를 생성한다.
Random(long seed) 매개변수seed를 시드값으로 하는 Random인스턴스를 생성한다.
boolean nextBoolean() boolean타입의 난수를 반환한다.
void nextBytes(byte[] bytes) bytes배열에 byte타입의 난수를 채워서 반환한다.
double nextDouble() double타입의 난수를 반환한다. (0.0 <= x < 1.0)
float nextFloat() float타입의 난수를 반환한다. (0.0 <= x < 1.0)
double nextGaussian() 평균은 0.0이고 표준편차는 1.0인 가우시안(Gaussian)분포에 따른 
double형의 난수를 반환한다.
int nextInt() int타입의 난수를 반환한다.(int의 범위)
int nextInt(int n) 0 ~ n의 범위에 있는 int값을 반환한다. (n은 범위에 포함되지 않음)
long nextLong() long타입의 난수를 반환한다. (long의 범위)
void setSeed(long seed) 시드값을 주어진 값(seed)로 변경한다.

 

댓글