자바 랜덤
Java Random 클래스는 일련의 난수를 생성하는 데 사용됩니다.
자바 랜덤 클래스
Random
클래스는 java.util 패키지의 일부입니다.- Java Random 클래스의 인스턴스는 난수를 생성하는 데 사용됩니다.
- 이 클래스는 integer, double, long, float 등 유형의 난수를 생성하는 여러 메서드를 제공합니다.
- 난수 생성 알고리즘은 시드 값에서 작동합니다. 제공되지 않으면 시스템 나노 시간에서 시드 값이 생성됩니다.
- 두 개의 Random 인스턴스가 동일한 시드 값을 갖는 경우 동일한 시퀀스의 난수를 생성합니다.
- Java Random 클래스는 스레드로부터 안전하지만 다중 스레드 환경에서는
java.util.concurrent.ThreadLocalRandom
클래스를 사용하는 것이 좋습니다. - 랜덤 클래스 인스턴스는 보안에 민감한 애플리케이션에 적합하지 않습니다. 이러한 경우에는
java.security.SecureRandom
을 사용하는 것이 좋습니다.
Java 임의 생성자
Java Random 클래스에는 다음과 같은 두 개의 생성자가 있습니다.
Random()
: 새로운 무작위 생성기 생성Random(long seed)
: 지정된 시드를 사용하여 새로운 무작위 생성기를 생성합니다.
자바 랜덤 클래스 메소드
Java Random 클래스의 몇 가지 메서드를 살펴보겠습니다.
nextBoolean()
: 이 메서드는 난수 생성기 시퀀스의 부울 값인 다음 유사 난수를 반환합니다.nextDouble()
: 이 메서드는 0.0과 1.0 사이의 이중 값인 다음 유사 난수를 반환합니다.nextFloat()
: 이 메서드는 0.0과 1.0 사이의 플로트 값인 다음 유사 난수를 반환합니다.nextInt()
: 이 메서드는 난수 생성기 시퀀스에서 다음 int 값을 반환합니다.- 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);
}
}