Java에서는 난수를 생성할 때 java.util.Random 클래스를 자주 사용한다.
이 클래스는 다양한 난수 생성 메서드를 제공하여 정수, 실수, Boolean 등 다양한 형식의 랜덤 값을 쉽게 생성할 수 있도록 도와준다.
이번 글에서는 Random 클래스의 기본 사용법부터 고급 활용법까지 알아보자.
▷ Random 클래스?
Random 클래스는 Java에서 난수를 생성하는 데 사용되는 클래스이다.
이 클래스는 특정 알고리즘을 기반으로 의사 난수를 생성한다. (의사난수란 : 완벽한 무작위가 아닌 특정한 규칙에 따라 계산된 숫자를 의미)
따라서 같은 시드(seed)를 사용하면 항상 동일한 난수 시퀀스를 얻을 수 있다.
그리고 아래와 같은 핵심 특징들을 가지고 있다.
- 다양한 타입의 난수 지원: 정수, 실수, Boolean 등 다양한 데이터 타입의 난수를 생성.
- 재현성: 시드 값을 설정하면 동일한 난수를 반복적으로 생성 가능.
- 범위 지정: 생성되는 난수의 범위를 제한 가능.
| Random 객체 생성
import java.util.Random;
public class RandomMang {
public static void main(String[] args) {
Random random = new Random(); // 기본 생성자
Random seededRandom = new Random(12345); // 시드 설정
}
}
이렇게 기본 생성자 사용한 객체와 시드 값을 설정한 객체 2가지로 생성할 수 있다.
| Random 클래스 사용법
import java.util.Random;
public class RandomMang {
public static void main(String[] args) {
Random random = new Random();
// 정수 난수 생성
int randomInt = random.nextInt();
System.out.println("랜덤 정수: " + randomInt);
// 0부터 n-1까지의 정수 난수 생성
int boundedInt = random.nextInt(10); // 0~9
System.out.println("0부터 9까지의 랜덤 정수: " + boundedInt);
// 실수 난수 생성
double randomDouble = random.nextDouble(); // 0.0 ~ 1.0
System.out.println("랜덤 실수: " + randomDouble);
// Boolean 난수 생성
boolean randomBoolean = random.nextBoolean();
System.out.println("랜덤 Boolean: " + randomBoolean);
}
}
실행 결과
랜덤 정수: 2090132964
0부터 9까지의 랜덤 정수: 8
랜덤 실수: 0.19068699579268766
랜덤 Boolean: false
random.next@@() 함수를 이용하여 난수의 범위를 지정하고 그 범위에 해당하는 난수값을 반환한다.
주요 메서드 정리
메서드 | 설명 | 범위 |
nextInt() | 임의의 정수 반환 | Integer의 모든 범위 |
nextDouble() | 0.0 이상 1.0 미만의 실수 반환 | 0.0 ≤ x < 1.0 |
nextBoolean() | 임의의 Boolean 값 반환 | true 또는 false |
nextLong() | 임의의 Long 타입 정수 반환 | Long의 모든 범위 |
nextFloat() | 0.0 이상 1.0 미만의 float 반환 | 0.0 ≤ x < 1.0 |
| Random의 시드(Seed)
아까 말했던 것 처럼 Random 클래스의 특징 중 시드(seed)라는 것이 존재한다.
시드는 난수 생성의 초기값으로 사용되며, 같은 시드 값으로 난수를 생성하면 항상 같은 순서의 결과를 얻을 수 있다.
public class SeedMang {
public static void main(String[] args) {
Random random1 = new Random(42); // 시드 값 42
Random random2 = new Random(42); // 동일한 시드 값
System.out.println("random1 값: " + random1.nextInt());
System.out.println("random2 값: " + random2.nextInt());
}
}
실행 결과
random1 값: -1170105035
random2 값: -1170105035
| ThreadLocalRandom: 멀티스레드 환경에서의 대안
마지막으로, 멀티스레드 환경에서 Random 객체를 여러 스레드가 동시에 사용하면 성능 저하가 발생할 수 있다.
이때, ThreadLocalRandom을 사용하여 각 스레드에 독립적인 난수 생성기를 제공하고 성능 저하를 막아낼 수 있다.
import java.util.concurrent.ThreadLocalRandom;
public class ThreadLocalRandomExample {
public static void main(String[] args) {
int randomInt = ThreadLocalRandom.current().nextInt(1, 10); // 1~9
double randomDouble = ThreadLocalRandom.current().nextDouble(0.5, 2.5); // 0.5~2.5
System.out.println("랜덤 정수: " + randomInt);
System.out.println("랜덤 실수: " + randomDouble);
}
}
Java의 Random 클래스는 난수를 생성하는 데에 있어 간단하면서도 여러 가지 기능을 갖고 있기에 다양한 상황에서 코드를 이용해 보세요!!
궁금한 점이나 추가적인 활용 예제가 있다면 댓글로 알려주세요! 😊
'언어 공부하기 > JAVA 개념' 카테고리의 다른 글
[Java 자바] ExceptionError와 Try-Catch 구문 완벽 가이드 : 기본 개념부터 예제까지 (자바 Try-Catch) (0) | 2024.11.22 |
---|---|
[Java 자바] Scanner 클래스 완벽 가이드 : 기본 개념부터 예제까지 (자바 Scanner) (0) | 2024.11.21 |
[Java 자바] ValueOf(), toString() 메소드 사용법 및 예제 알아보기(자바 함수) (0) | 2024.11.18 |
[Java 자바] indexOf()와 substring() 메소드 사용법 및 예제 알아보기(자바 함수) (1) | 2024.11.13 |
[Java 자바] length(), charAt() 메소드에 대하여 빠르게 알아보기(자바 함수) (1) | 2024.11.13 |