Java (자바)

[Java] 자바 랜덤 함수 - Random 클래스

Oscar:) 2022. 7. 6. 20:17

 

프로그램을 만들다보면,

'임의의 값' 혹은 '무작위 값' 을 이용해야 할 때가 있다.

 

이러한 우리를 위해서,

자바는 Random 클래스를 제공해준다.

 

그럼, Random 클래스를 사용해보자 !

 

 


 

 

1. Random 클래스를 사용하기 위해서는

java.util 패키지에서 import 해줘야 한다.

import java.util.Random; // 임포트 !

public class Random_Example {

	public static void main(String[] args) {
    
	}

}

 

 

 

2. Random 클래스를 호출하여 객체를 생성해준다.

import java.util.Random; // 임포트 !

public class Random_Example {

	public static void main(String[] args) {
		
        // random 객체 생성 및 초기화
		Random random = new Random(); 
        
	}

}

 

 

 

3. 결과 값을 확인하기 위해 변수를 생성 및 초기화.

import java.util.Random; // 임포트 !

public class Random_Example {

	public static void main(String[] args) {
		
        // random 객체 생성 및 초기화
		Random random = new Random(); 
		
        // 정수형 자료형 타입의 변수 num 선언
		int num; 
		
        // 변수 num을 정수타입 랜덤함수로 초기화
		num = random.nextInt(); 
		
        // 변수 num을 출력해줘
		System.out.println("결과 값 : " + num); 

	}

}

 

Random 클래스에는 다양한 메서드가 포함되어 있다.

 

대부분 우리가 공부했던 자료형 타입으로 생각하면 쉽다.

 

nextInt() - int 타입의 난수를 리턴
nextDouble() - double 타입의 난수를 리턴
nextBoolean() - boolean 타입의 난수를 리턴
등등

 

 

출력 결과는 다음과 같다.

약 7~8번 실행한 결과 값이다.

 

 

결과 값을 보면 짐작이 가겠지만..!

nextInt() 를 사용했기에, int 타입 난수를 반환했다.

 

즉, int 타입의 범위 (약 -21억 ~ 21억) 를 반환한다.

 


 

하지만, 우리는 저렇게나 큰 범위의 수는 거의 사용할 일이 없다.

 

특정 범위 안에서만 랜덤 값을 결정하고 싶을 때는 어떻게 해야 할까?

 

 

 

4. 특정 범위에서의 랜덤 값 반환.

import java.util.Random;

public class Random_Example {

	public static void main(String[] args) {
		
		Random random = new Random();
		
		int num;
		
		num = random.nextInt(2) // 여기에 값을 입력
		
		System.out.println("결과 값 : " + num);

	}

}

 

nextInt() 의 괄호 안에 바운드 값을 입력해주면 된다.

 

50%의 확률을 가지는 게임을 만든다고 가정해보자.

 

결과 값은 2개일 것이다.

따라서, 위와 같이 바운드를 2로 입력해주었다.

 

 

 

출력 결과는 다음과 같다.

약 6~7번 실행한 결과 값이다.

 

각각 50%의 확률로 0 또는 1만 출력하는 것을 확인할 수 있다.

 

랜덤 함수에서도 역시, int 타입의 기본 값은 0이다.

 

 

 


 

??? : 난 결과 값을 1부터 시작하고 싶은데?

import java.util.Random;

public class Random_Example {

	public static void main(String[] args) {
		
		Random random = new Random();
		
		int num;
		
		num = random.nextInt(2) + 1; // 여기
		
		System.out.println("결과 값 : " + num);

	}

}

 

해결책은 생각보다 단순했다.

 

변수를 초기화 할 때,

nextInt() 메서드 옆에 +1 해주면 된다.

 

1 또는 2의 결과만 출력될 것이다.

 

 


 

 

5. 간단한 랜덤박스 게임(?) 구현

import java.util.Random;
import java.util.Scanner;

public class Random_Example {

	public static void main(String[] args) {
		
		Random random = new Random();
		Scanner scan = new Scanner(System.in);
		
		int num;
		int select;
		
		while (true) {
			
			System.out.println("[ 랜덤 박스를 개봉하시려면 1을 입력하세요 ]");
			
			num = random.nextInt(3) + 1;

			select = scan.nextInt();

			if (select == 1) {
			
		if (num == 1) {
			System.out.println("★ A 아이템 획득 ★\n");
		} else if (num == 2) {
			System.out.println("★ B 아이템 획득 ★\n");
		} else {
			System.out.println("★ C 아이템 획득 ★\n");
		}
		
			} // if (select == 1)
		
		} // while (true)
		
	} // 메인 메서드

} // 클래스

 

간단하게나마 코드를 풀이해 본다면,

 

사용자가 1을 입력할 때마다 3가지의 결과 값 中,

한가지의 결과 값을 반환하며 텍스트가 출력되는 형식이다.

 

while 반복문 내에서 num의 랜덤값을 초기화 해주어서,

반복문이 한바퀴 돌 때마다 랜덤값이 바뀌게끔 작성해주었다.

 

while(true) 이기 때문에,

따로 false 값을 반환해주지 않으면 무한 반복된다.

실제로 적용할 때는 true 대신에, 적절한 조건식을 작성하기 바란다.

 

 

출력 결과는 다음과 같다.

 

랜덤하게 결과가 출력되는 것을 확인할 수 있다.

 

 


 

+ 랜덤 함수 포스팅과는 관계 없는 설명을 덧붙이자면..

 

코드 내에 조건문, 반복문 등 중괄호{} 를 많이 사용하다 보면,

코드가 끝나는 시점에 중괄호를 닫는 부분이 많이 쌓이게 된다. 

 

코드의 흐름을 이해하려면

각 코드의 범위를 정확히 파악해야 하는데,

 

마지막 부분이 }}}} 이렇게 되어있다면

종종 범위를 파악하기 힘들 때가 있다.

 

필자는 위와 같이 코드가 끝나는 부분의 중괄호에

주석 처리를 해주는 편이다.

(코딩을 시작한 지 얼마 안 된 분들께는 추천드린다..!)

 


 

오늘은 자바의 Random 클래스에 대해 알아보았다.

 

랜덤한 값을 잘만 이용한다면,

생각보다 재미있는 프로그램을 많이 만들 수 있을 것 같다.