웹사이트 검색

자바 랜덤


Java Random 클래스는 일련의 난수를 생성하는 데 사용됩니다.

자바 랜덤 클래스

  • Random 클래스는 java.util 패키지의 일부입니다.
  • Java Random 클래스의 인스턴스는 난수를 생성하는 데 사용됩니다.
  • 이 클래스는 integer, double, long, float 등 유형의 난수를 생성하는 여러 메서드를 제공합니다.
  • 난수 생성 알고리즘은 시드 값에서 작동합니다. 제공되지 않으면 시스템 나노 시간에서 시드 값이 생성됩니다.
  • 두 개의 Random 인스턴스가 동일한 시드 값을 갖는 경우 동일한 시퀀스의 난수를 생성합니다.
  • Java Random 클래스는 스레드로부터 안전하지만 다중 스레드 환경에서는 java.util.concurrent.ThreadLocalRandom 클래스를 사용하는 것이 좋습니다.
  • 랜덤 클래스 인스턴스는 보안에 민감한 애플리케이션에 적합하지 않습니다. 이러한 경우에는 java.security.SecureRandom을 사용하는 것이 좋습니다.

Java 임의 생성자

Java Random 클래스에는 다음과 같은 두 개의 생성자가 있습니다.

  1. Random(): 새로운 무작위 생성기 생성
  2. Random(long seed): 지정된 시드를 사용하여 새로운 무작위 생성기를 생성합니다.

자바 랜덤 클래스 메소드

Java Random 클래스의 몇 가지 메서드를 살펴보겠습니다.

  1. nextBoolean(): 이 메서드는 난수 생성기 시퀀스의 부울 값인 다음 유사 난수를 반환합니다.
  2. nextDouble(): 이 메서드는 0.0과 1.0 사이의 이중 값인 다음 유사 난수를 반환합니다.
  3. nextFloat(): 이 메서드는 0.0과 1.0 사이의 플로트 값인 다음 유사 난수를 반환합니다.
  4. nextInt(): 이 메서드는 난수 생성기 시퀀스에서 다음 int 값을 반환합니다.
  5. nextInt(int n): 이 메서드는 난수 생성기 시퀀스에서 0과 지정된 값 사이의 int 값인 유사 난수를 반환합니다.

자바 임의의 예

아래 자바 랜덤 예제 프로그램을 살펴보자.

package com.journaldev.examples;

import java.util.Random;

/**
 * Java Random Number Example Program
 * 
 */
public class RandomNumberExample {

	public static void main(String[] args) {
		
		//initialize random number generator
		Random random = new Random();
		
		//generates boolean value
		System.out.println(random.nextBoolean());
		
		//generates double value
		System.out.println(random.nextDouble());
		
		//generates float value
		System.out.println(random.nextFloat());
		
		//generates int value
		System.out.println(random.nextInt());
		
		//generates int value within specific limit
		System.out.println(random.nextInt(20));

	}

}

위 프로그램의 출력은 다음과 같습니다.

false
0.30986869120562854
0.6210066
-1348425743
18

Java Radom Number Generation에 대한 자세한 내용은 이 게시물을 확인하세요.

시드를 사용하여 난수 생성

시드를 사용하여 난수를 생성하는 방법에는 두 가지가 있습니다.

Random random = new Random(long seed);
                         
Random random1 = new Random();
random1.setSeed(seed);

시드는 next(int) 메서드에 의해 유지되는 의사 난수 생성기 내부 상태의 초기 값입니다.

package com.journaldev.examples;

import java.util.Random;

/**
 * Java Random Number Using Seed Example Program
 * 
 * @author pankaj
 *
 */
public class RadomSeedExample {

	public static void main(String[] args) {
		
		//using constructor
		Random random = new Random(100);
		System.out.println("Using Constructor");
		System.out.println(random.nextInt());
		
		//using method
		Random random2 = new Random();
		random2.setSeed(200);
		System.out.println("Using Method");
		System.out.println(random2.nextInt());
	}
}

위 프로그램의 출력은 다음과 같습니다.

Using Constructor
-1193959466
Using Method
-1133938638

동일한 시드를 두 개의 서로 다른 난수 생성기에 전달하면 어떻게 될까요? 아래 프로그램을 살펴보고 동일한 시드를 두 개의 서로 다른 난수 생성기에 전달하면 어떻게 되는지 살펴보겠습니다.

package com.journaldev.examples;

import java.util.Random;

/**
 * Java Random Number Using Same Seed Example Program
 * 
 */
public class RandomNumberSameSeedExample {

	public static void main(String[] args) {
		
		//initialize two random number generators using same seed
		Random random1 = new Random(100);
		Random random2 = new Random(100);
		
		System.out.println(random1.nextInt());
		System.out.println(random2.nextInt());

	}

}

위 프로그램의 출력은 다음과 같습니다.

-1193959466
-1193959466

동일한 시드를 두 개의 다른 난수 생성기에 전달하면 동일한 난수가 생성되는 것을 볼 수 있습니다.

Java 8 임의 클래스 메서드

위의 이미지에서 볼 수 있듯이 Java 8에는 Random 클래스에 많은 새로운 메서드가 추가되었습니다. 이러한 메서드는 난수 스트림을 생성할 수 있습니다. 아래는 1에서 100 사이의 5개 정수 스트림을 생성하는 간단한 프로그램입니다.

package com.journaldev.random;

import java.util.Random;
import java.util.stream.IntStream;

public class JavaRandomExample {

	public static void main(String[] args) {

		Random random = new Random();

		// generate stream of 5 ints between 1 to 100
		IntStream ints = random.ints(5, 1, 100);

		ints.forEach(System.out::println);
	}

}