Java 입문 | java.util 패키지 | 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을 넘지 않는 수를 난수로 발생 시키는 것을 확인 할수 있다.