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 클래스에는 다음과 같은 두 개의 생성자가 있습니다:
Random()
: 새로운 난수 생성기를 생성합니다.Random(long seed)
: 지정된 시드를 사용하여 새로운 난수 생성기를 생성합니다.
자바 Random 클래스 메소드
자바 Random 클래스의 일부 메소드를 살펴보겠습니다.
nextBoolean()
: 이 메소드는 난수 생성기 시퀀스에서 다음 의사 난수로 boolean 값을 반환합니다.nextDouble()
: 이 메소드는 0.0과 1.0 사이의 double 값을 반환합니다.nextFloat()
: 이 메소드는 0.0과 1.0 사이의 float 값을 반환합니다.nextInt()
: 이 메소드는 난수 생성기 시퀀스에서 다음 int 값을 반환합니다.- 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