자바 랜덤

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

Java Random 클래스

  • Random 클래스는 java.util 패키지의 일부입니다.
  • Java Random 클래스의 인스턴스는 난수를 생성하는 데 사용됩니다.
  • 이 클래스는 정수, 실수, long, float 등의 유형의 난수를 생성하는 여러 메소드를 제공합니다.
  • 난수 생성 알고리즘은 시드 값을 기반으로 동작합니다. 시드 값을 제공하지 않으면 시스템의 나노 시간에서 시드 값을 생성합니다.
  • 만약 두 개의 Random 인스턴스가 동일한 시드 값을 가지고 있다면, 동일한 난수 순서를 생성합니다.
  • Java Random 클래스는 스레드 안전(thread-safe)하지만, 멀티스레드 환경에서는 java.util.concurrent.ThreadLocalRandom 클래스를 사용하는 것이 좋습니다.
  • Random 클래스 인스턴스는 보안에 민감한 애플리케이션에 적합하지 않으며, 이러한 경우에는 java.security.SecureRandom을 사용하는 것이 좋습니다.

Java Random 생성자

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

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

자바 Random 클래스 메소드

자바 Random 클래스의 일부 메소드를 살펴보겠습니다.

  1. nextBoolean(): 이 메소드는 난수 생성기 시퀀스에서 다음 의사 난수로 boolean 값을 반환합니다.
  2. nextDouble(): 이 메소드는 0.0과 1.0 사이의 double 값을 반환합니다.
  3. nextFloat(): 이 메소드는 0.0과 1.0 사이의 float 값을 반환합니다.
  4. nextInt(): 이 메소드는 난수 생성기 시퀀스에서 다음 int 값을 반환합니다.
  5. nextInt(int n): 이 메소드는 난수 생성기 시퀀스에서 0과 지정된 값 사이의 int 값을 반환합니다.

자바 Random 예제

아래의 자바 Random 예제 프로그램을 살펴보겠습니다.

package com.journaldev.examples;

import java.util.Random;

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

	public static void main(String[] args) {
		
		//난수 생성기 초기화
		Random random = new Random();
		
		//boolean 값을 생성
		System.out.println(random.nextBoolean());
		
		//double 값을 생성
		System.out.println(random.nextDouble());
		
		//float 값을 생성
		System.out.println(random.nextFloat());
		
		//int 값을 생성
		System.out.println(random.nextInt());
		
		//int 값을 생성 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) {
		
		//생성자를 사용하는 방법
		Random random = new Random(100);
		System.out.println("Using Constructor");
		System.out.println(random.nextInt());
		
		//메소드를 사용하는 방법
		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) {
		
		//같은 시드를 사용하여 두 개의 무작위 숫자 생성기 초기화
		Random random1 = new Random(100);
		Random random2 = new Random(100);
		
		System.out.println(random1.nextInt());
		System.out.println(random2.nextInt());

	}

}

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

-1193959466
-1193959466

두 개의 다른 무작위 숫자 생성기에 같은 시드를 전달하면 같은 무작위 숫자가 생성됨을 볼 수 있습니다.

Java 8 Random 클래스 메소드

위의 이미지에서 볼 수 있듯이, 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();

		// 1부터 100 사이의 5개의 정수로 이루어진 스트림 생성
		IntStream ints = random.ints(5, 1, 100);

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

}

Java Random 클래스에 대해 간략히 알아보았습니다. 참고: API 문서

Source:
https://www.digitalocean.com/community/tutorials/java-random