Java java.math 패키지의 Random 클래스
Random 클래스는 난수 발생시킬 수 있는 객체이다. 다양한 데이터 타입형(double, float, int, long 등) 발생 시키거나 일정한 범위에 존재하는 난수를 발생되게 할 수도 있다. 매번 실행할 때 마다 같은 수의 난수가 발생되게 할 수도 있다.
Random 클래스 생성자
생성자 | 설명 |
---|---|
Random() | 디폴트 생성자. 현재 시간을 초기 값으로 하는 난수 발생기 객체를 생성한다. |
Random(long seed) | long형의 seed값을 메게변수로 받아 난수 발생기 객체를 생성한다. |
Random 객체를 생성할 때 seed 값을 지정하게 되면, 시작 순서 값을 지정한다는 것을 뜻한다. seed 값을 지정한 후에 난수를 발생시키게 되면 매번 동일한 난수가 발생하게 된다. 매번 실행 할 때마다 다른 난수를 얻을 수 있는 가장 좋은 방법은 seed 값으로 현재 시간을 사용하는 것이다. 시간은 계속 변하기 때문에 같은 난수가 발생하지 않는다.
Random 메소드
메소드 | 설명 |
---|---|
void nextBytes(byte[] bytes) | buffer를 난수로 채운다. |
boolean nextBoolean() | boolean 형태의 난수를 반환한다. |
double nextDouble() | double 형태의 난수를 반환한다. |
float nextFloat() | float 형태의 난수를 반환한다. |
int nextInt() | int 형태의 난수를 반환한다. |
long nextLong() | long 형태의 난수를 반환한다. |
int nextInt(int bound) | 한계 값(bound)을 받아서 난수를 반환한다. |
double nextGaussian() | 가우스의 형의 난수를 double 형태의 난수를 반환한다. |
void setSeed(long seed) | 난수 발생기의 seed 값을 새로 설정한다. |
Random 예제
예제1) seed에 따른 난수를 구하는 예이다.
package com.devkuma.tutorial.java.util;
import java.util.Random;
public class RandomClass {
public static void main(String[] args) {
Random r1 = new Random();
Random r2 = new Random(10);
for (int i = 0; i < 10; i++) {
System.out.println("r1: " + r1.nextInt() + ", r2: " + r2.nextInt());
}
}
}
실행 결과는 아래와 같다.
r1: 2011236985, r2: -772289311, r3: -1157793070
r1: 1578624710, r2: -604617698, r3: 1913984760
r1: -262276649, r2: 612254308, r3: 1107254586
r1: 1706079238, r2: -1664224378, r3: 1773446580
r1: -583579103, r2: -809586602, r3: 254270492
r1: 1201978631, r2: 1898792462, r3: -1408064384
r1: 1897434446, r2: 1738277915, r3: 1048475594
r1: 1847101385, r2: -1454243203, r3: 1581279777
r1: 44315199, r2: -482107837, r3: -778209333
r1: 1881949787, r2: -221323214, r3: 1532292428
r1은 seed값을 넣지 않았고 r2은 현재 시간을 seed로 설정했다. r3는 고정적인 10으로 설정했다. 프로그램을 여러번 실행 시켜보면 r1과 r2은 주기적으로 변경이 되지만 r3은 변하지 않은 것을 확인 할 수 있다.
예제2) 1부터 100사이의 난수를 구하는 예이다.
package com.devkuma.tutorial.javautil;
import java.util.Random;
public class RandomClass2 {
public static void main(String[] args) {
Random r = new Random();
for (int i = 0; i < 10; i++) {
System.out.println(r.nextInt(100));
}
}
}
실행 결과는 아래와 같다.
42
38
33
14
21
41
11
47
96
7
nextInt 메소드에 한계 값(bound)을 100으로 넣고 실행을 하게 되면 100을 넘지 않는 수를 난수로 발생 시키는 것을 확인 할수 있다.
최종 수정 : 2021-08-27