본문 바로가기
언어 공부하기/JAVA 개념

[Java 자바] Random 클래스 완벽 가이드 : 기본 개념부터 예제까지 (자바 Random)

by 망댕이 2024. 11. 21.
반응형

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 클래스는 난수를 생성하는 데에 있어 간단하면서도 여러 가지 기능을 갖고 있기에 다양한 상황에서 코드를 이용해 보세요!!

 

궁금한 점이나 추가적인 활용 예제가 있다면 댓글로 알려주세요! 😊

반응형