Java

안드로이드(android) 난수 발생 방법(랜덤 숫자) : Random(), Math.random()

난수(무작위, 랜덤) 발생 방법

java.util.Random 클래스를 사용하여 int, long, float, double 타입의 난수를 생성하여 리턴 받을 수 있다. 이런 클래스를 제공해주니 별도로 개발자가 구현하지 않아도 됨으로 편하다. 그렇다면 이런 난수를 발생하면서 까지 개발을 해야하는 것은 무엇을까? 만약 게임을 만든다면 주사위게임이나 카드게임을 만들때 난수를 사용할 수 있다. 혹은 로또번호 생성기를 만들때 사용할 수 있지 않을까? 그럼, 이제 샘플코드를 참고하여 살펴보자.

■Java Random클래스를 사용한 예시

import java.util.Random;

public static CreateRandomNumbers(){
	Random createRandom = new Random();
	int iCreateNumber = createRandom.nextInt(45);
}
import java.util.Random;

public static CreateRandomNumbers(){
	Random createRandom = new Random();
    
    //for문을 사용하여 10개의 난수를 발생시켜보자.
    for(int i = 0; i<10; i++){    
	   int iCreateNumber = createRandom.nextInt(45);
       System.out.println("Random Number : " + iCreateNumber);
    }
}

출력결과 (Output) :

Random Number : 5
Random Number : 25
Random Number : 21
Random Number : 31
Random Number : 14
Random Number : 45
Random Number : 29
Random Number : 18
Random Number : 35
Random Number : 1

Random클래스의 객체는 ceateRandom으로 초기화 하였다. Random 클래스에는 nextInt()와 같은 메소드가 있다.

최대값으로 지정된 인수를 기반으로 난수를 생성하여 리턴한다. 예시에서와 같이 45를 인수로 받았다면

최소값 0부터 최대값 45까지의 숫자중에 랜덤으로 1개의 값을 리턴해준다.

나는 1에서 45사이의 정수값만 리턴 받고 싶다면 어떻게 하면 될까? 플러스1을 해주면 된다. 다음 예시를 보자.

import java.util.Random;

public static CreateRandomNumbers(){
	Random createRandom = new Random();
  	
    // 1~45 사이의 정수 랜던 값을 생성한다.
	int iCreateNumber = createRandom.nextInt(45) + 1;
    System.out.println("Random Number : " + iCreateNumber);
    
    
    // 10~54 사이의 정수 랜던 값을 생성한다.
	int iCreateNumber = createRandom.nextInt(45) + 10;
    System.out.println("Random Number : " + iCreateNumber);
 
}

음수와 양수의 랜덤값을 생성하는 방법에 대한 예시는 다음과 같다. nextInt()메소드 뒤에 마이너스 값을 넣어 주면된다.

import java.util.Random;

public static CreateRandomNumbers(){
	Random createRandom = new Random();
  	
    // -10~10 사이의 정수 랜던 값을 생성한다.
    for(int i = 0; i<10; i++){  
	 int iCreateNumber = createRandom.nextInt(21) - 10;
     System.out.println("Random Number : " + iCreateNumber); 
    }
 
}

출력결과 (Output) :

Random Number : -1
Random Number : -8
Random Number : -2
Random Number : 8
Random Number : 0
Random Number : 10
Random Number : 3
Random Number : -9
Random Number : -8
Random Number : 6

Random클래스는 nextBoolean(), nextBytes(), nextDouble(), next Float(), nectLong() 등의 메소드도 지원한다.

필요한 상황에 맞게 메소드를 호출하여 사용하자.


두번째 방법으로 Math.random()를 이용한 난수 생성 방법도 있다. 10개의 임의의 숫자를 생성해보자.

Java Math.random을 사용한 예시

import java.util.Random;

public static CreateRandomNumbers(){

     Random createRandom = new Random(); 

     //for문을 사용하여 10개의 난수를 발생시켜보자.
     for(int i = 0; i<10; i++){ 
     	double num = Math.random();
        System.out.println("Random Number : " + num);
     }

}

출력결과 (Output) :

Random Number : 0.6578861657634629 
Random Number : 0.9727201349574885 
Random Number : 0.3114755044056362 
Random Number : 0.31797796598960437 
Random Number : 0.52829933342384 
Random Number : 0.23116462079911893 
Random Number : 0.7306332891555806 
Random Number : 0.6513404778327031 
Random Number : 0.5189674039641334 
Random Number : 0.14475603623366773

리턴 값은 유일하게 double 타입이다. 정수형은 제공하지 않는다. 정수가 아닌 0.0에서 ~1.0 범위에서의 double값을 얻을 수 있다.

참조 : https://docs.oracle.com/javase/8/docs/api/java/util/Random.html

Random클래스를 열어보았더니, 최 상단 주석에 ORACLE이 보였다. 구글과 오라클은 JAVA 라이센스 문제로 몇 년간 계속 법정에서 싸우고 있다.지금은 결판이 났나 모르겠다.조만간 결판이 나지 않을까 생각된다. 오라클은 썬마이크시스템을 인수하면서 JAVA의 유료화를 생각해두고 있었을지도 모른다. 나는 구글이 승소하길 바라고 있다.

아마 자바 개발자라면 다 그렇게 생각하고 있지 않을까

Leave a Reply

error: Content is protected !!