본문으로 바로가기

java.util 패키지에 속해있는 Random 클래스는 난수 즉, 예측 불가능한 수를 생성해주는 클래스이다.

이러한 난수를 생성하는 Random 클래스는 여러상황에서 다양하게 필요하기에 자주 사용되는 편이며,

API를 보면 사용법도 매우 간단하다.



위 캡처처럼 Random(), Random(long seed)를 이용해 객체를 생성하고

제공하는 메소드를 통해 원하는 자료형으로 난수를 발생 시킬 수 있다.

흔히 사용가능한 메소드는 다음과 같다.

(nextInt의 경우 매개변수 없이 실행할 경우 int의 전체 범위내에서 난수를 발생한다.)

(밑의 표에는 없지만 IntStream, DoubleStream, LongStream으로 반환하는 메소드들도 존재한다.)

(Random클래스가 아닌 Math에도 nextDouble() 메소드와 같은 역할을 하는 random()이 존재한다.)


 boolean nextBoolean()

 boolean형 난수 반환 

 int nextInt()

 int형 난수 반환 

 long nextLong() 

 long형 난수 반환

 int nextInt(int n)

 0이상 n미만의 범위내에 있는 int형 난수 반환 

 float nextFloat() 

 0,0이상 1.0미만의 float형 난수 반환 

 double nextDouble() 

 0.0이상 1.0미만의 double형 난수 반환 



-예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.Random;
 
public class ChanRandom{
    public static void main(String[] args){
        //Random 객체 생성
        Random rand = new Random();
        //rand = newRandom(System.currentTimeMillis());
        //rand.setSeed(System.currentTimeMillis());
        
        //Seed기반 Random객제 생성    
        //rand = new Random(20);
        //rand.setSeed(20);
        
        //boolean형 난수 추출
        boolean ranBool = rand.nextBoolean();
        System.out.println("booelan형 : " + ranBool);
        
        //int형 난수 추출(-2,147,483,648 ~ 2,147,483,647)
        int ranInt1 = rand.nextInt();
        System.out.println("int형 (범위x) : " + ranInt1);
        
        //long형 난수 추출
        long ranLong = rand.nextLong();
        System.out.println("long형 : " + ranLong);
        
        //int형 난수 추출(0~9)
        int ranInt2 = rand.nextInt(10);
        System.out.println("int형 (0~9) : " + ranInt2);
        
        //int형 난수 추출(-10~0)
        int ranInt3 = rand.nextInt(11)-10;
        System.out.println("int형 (-10~0) : " + ranInt3);
        
        //float형 난수 추출
        float ranFloat = rand.nextFloat();
        System.out.println("float형 : " + ranFloat);
        
        //double형 난수 추출
        double ranDouble = rand.nextDouble();
        System.out.println("double형 : " + ranDouble);
    }
}

cs


-실행결과




실행결과 예상한 난수들이 제대로 발생되는걸 볼 수 있다.

이처럼 컴퓨터가 만든 난수를 'Pseudo-random number' 라 하는데 해석하면 가짜 난수라는 것이다.

왜 가짜 난수일까? 

사실 사람은 주사위를 던지는 것같은 행위를 통해 난수를 얼마든지 발생할 수 있으나,

컴퓨터의 경우 난수를 발생시키는 일은 상당히 어렵다.

따라서 자바는 하나의 숫자를 근거(씨앗)로 삼아 이를 기반으로 난수를 발생시키도록 되어있는데,

즉 이러한 근거(씨앗)의 숫자가 같으면 같은 결과값이 나오게 되고 그래서 가짜난수라 일컫는 것이다.


위의 예제에서 관련된 내용이 6~12번의 내용이 되며

new Random()을 통해 난수를 발생시키면 사실상 new Random(System.currentTimeMillis()) 와 같은

결과를 내는 것으로 System.currentTimeMillis() 는 컴퓨터 현재시간을 가지고 특정 시간 이후의 밀리초를

반환하는 클래스 이므로 실행할때마다 실행 결과가 바뀌었던 것이다.


만약 주석처리되어있는 11번이나 12번 행이 실행이 된다면 근거의 숫자가 20으로 할당되고

이를 가지고 난수를 발생하기에 항상 같은 결과를 결과값으로 받게 된다.