[Java] 자바 Random(랜덤) 클래스 쉽게 알아보기! 난수만들기

2020-12-18


자바를 처음 공부하다 보면, 누구나 한 번쯤 주사위 확률 예제를 봤을 것이다. 이 경우 Math 클래스의 random();이라는 메서드를 사용해서 0 ~ 1의 난수를 얻어 이후 정수를 더해 Integer값을 얻어 냈을 것이다. 그렇다면 double 난수가 아닌 int / long /float와 같은 난수뿐 아니라, boolean 난수를 얻으려면 어떻게 해야 할까?

 

바로 Random클래스를 사용하면 이와 같은 문제를 쉽게 해결할  수 있다. 아래의 예제를 살펴보자.


package tRandom;

import java.util.Random;

public class main {

	public static void main(String[] args) {
		
		Random ran = new Random();
		//랜덤 클래스 선언
		
		int [] arrI = new int [5];
		long [] arrL = new long[5];
		float[] arrF = new float[5];
		boolean [] arrB = new boolean [5];
		//각 타입별 5개의 값이 들어갈 배열 선언
		
		for(int i = 0; i < 5; i++) {
			arrI[i] = ran.nextInt();
			arrL[i] = ran.nextLong();
			arrF[i] = ran.nextFloat();
			arrB[i] = ran.nextBoolean();
		}

		for(int i = 0; i < 5; i++) {
			System.out.println(arrI[i] + " / " + arrL[i] + " / " 
								+ arrF[i] + " / " + arrB[i] + " / ");
		}
		
		
	}

}

 

int / long / float / boolean 모두 자신의 타입별 값을 받을 수 있는 배열을 선언해주었으며, 이후 for문을 통해 난수를 생성할 수 있게 하였다. 출력 결과는 아래와 같으며, 각 타입에 맞는 난수를 출력하는 것을 확인할 수 있다.


그렇다면 Math.random() 메서드처럼 주사위 예제를 만들려면 어떻게 해야 할까? 코드는 아래와 같다.

package tRandom;

import java.util.Random;

public class main {

	public static void main(String[] args) {
		
		Random ran = new Random();
		//랜덤 클래스 선언
		
		int [] arrI = new int [6];
		
		for(int i = 0; i < 6; i++) {
			arrI[i] = ran.nextInt(6) + 1;	
		}
		
		
		for(int i = 0; i < 5; i++) {
			System.out.println(arrI[i]);
		}
		
		
	}

}

 

간단하게 Int 타입의 배열을 선언해 주고 이후 매개 값으로 6을 넣고 + 1을 해주면 1 ~ 6 까지의 랜덤한 수가 출력된다.

그렇다면 왜 + 1 을 해주는 걸까? 이유는 단순하다. nextInt 메서드에 매개 값이 주어지면, 0부터 시작하기 때문에 매개 값을 6을 줄 경우 0 ~ 5의 범위로 난수가 생성된다. 때문에 + 1을 해주어 1 ~ 6의 난수가 출력될 수 있도록 해주는 것이다.