반응형
이번 글에서는 java.util.Random 클래스를 사용해 무작위 숫자(난수)를 생성하고,
직접 고른 번호와 당첨 번호를 비교해 로또 시뮬레이션을 해보는 예제를 실습합니다.
그리고 마지막에는 Math.random()과의 차이점도 함께 정리합니다.
📌 예제 코드
import java.util.Arrays;
import java.util.Random;
public class RandomExample {
public static void main(String[] args) {
int[] selectNum = new int[6];
Random rand = new Random(3); // 시드 값 3
System.out.print("선택 번호 : ");
for (int i = 0; i < selectNum.length; i++) {
selectNum[i] = rand.nextInt(45) + 1; // 1~45 사이 난수 생성
System.out.print(selectNum[i] + " ");
}
System.out.println();
int[] winningNum = new int[6];
rand = new Random(5); // 시드 값 5 (다르게 설정됨)
System.out.print("당첨 번호 : ");
for (int i = 0; i < selectNum.length; i++) {
winningNum[i] = rand.nextInt(45) + 1;
System.out.print(winningNum[i] + " ");
}
System.out.println();
Arrays.sort(selectNum);
Arrays.sort(winningNum);
boolean result = Arrays.equals(selectNum, winningNum);
System.out.print("당첨 여부 : ");
if (result)
System.out.println("1등에 당첨되었습니다.");
else
System.out.println("당첨되지 않았습니다.");
}
}
💻 실행 결과
선택 번호 : 40 15 41 2 28 21
당첨 번호 : 38 4 41 35 11 12
당첨 여부 : 당첨되지 않았습니다.
💬 코드 설명
- Random rand = new Random(seed) 형태로 생성 시, 시드(seed) 값이 같으면 항상 동일한 난수 시퀀스가 생성됩니다.
- rand.nextInt(45) + 1은 1부터 45까지의 정수를 무작위로 하나 생성합니다.
- 두 개의 int[] 배열(selectNum, winningNum)은 서로 다른 시드를 사용하여 각각 번호를 생성합니다.
- Arrays.sort()로 정렬한 뒤 Arrays.equals()로 배열 내용이 동일한지 비교합니다.
- 결과가 같다면 1등 당첨, 다르면 미당첨으로 출력됩니다.
💡 포인트 정리
- Random 클래스는 시드 값을 설정하면 항상 같은 난수를 재현할 수 있어 테스트에 유리합니다.
- nextInt(n)은 0 이상 n 미만의 정수를 반환하며, 범위를 조정하려면 +1 등으로 보정 필요
- 배열을 정렬한 후 비교하면 순서가 달라도 값이 같을 때 동등하다고 판단 가능합니다.
🔄 Math.random()과의 차이점
항목 | Random 클래스 | Math.random() |
반환 값 | 다양한 타입 (int, double, long, ...) | double (0.0 이상 1.0 미만) |
시드(seed) 설정 | 가능 (new Random(seed)) | 불가능 (내부 시드 자동 설정) |
재현 가능성 | 시드가 같으면 항상 동일한 난수 순서 생성 | 재현 불가 (실행마다 난수 순서가 다름) |
객체 생성 여부 | Random 인스턴스 필요 | 클래스 메서드이므로 객체 없이 호출 가능 |
✅ Random은 다양한 유형의 난수를 만들고, 시드 설정이 가능하여 테스트나 시뮬레이션에 적합
✅ Math.random()은 간편하지만 단순한 double 값만 생성 가능
📌 정리하자면, Random 클래스를 사용하면 다양한 유형의 난수를 쉽게 생성할 수 있으며,
시드를 지정해 반복 가능한 난수 시퀀스를 만들 수 있어 테스트용 코드에서 매우 유용합니다.
간단한 경우엔 Math.random()도 충분하지만, 정밀한 제어가 필요하다면 Random 클래스가 더 적합합니다.
'Java > 자바 정리' 카테고리의 다른 글
114. 날짜 간 차이 계산하기 – ChronoUnit으로 남은 시간 체크 (0) | 2025.05.14 |
---|---|
113. 날짜와 시간 계산도 쉽다! – LocalDateTime과 날짜 연산 (0) | 2025.05.14 |
112. 날짜와 시간, 보기 좋게 출력해보자 – Date와 SimpleDateFormat (0) | 2025.05.14 |
110. 수학 계산을 간단하게! – Math 클래스 활용하기 (0) | 2025.05.14 |
109. 문자열을 더 빠르게 다루자 – StringBuilder로 조작하기 (0) | 2025.05.14 |
108. 시스템 정보 한눈에 확인 – System.getProperty()와 getProperties() (0) | 2025.05.14 |