티스토리 뷰

반응형

[Java] Random 랜덤 숫자 및 자료형 생성 하기 

java.util.random 클래스를 이용한 랜덤 자료형 생성 vs java.lang.Math와 비교


  Random 클래스


 1.  호출Random 객체 생성하기

Random random = new Random();

위와 같이 Random 객체를 생성한다.

Math와 달리 한번 생성한 객체를 재활용하여 지속적으로 사용할 수 있다.



 2-1.  정수 Random (int)생성

int 의 범위 -2,147,483,648 ~2,147,483,647 내에서 무작위 수 발생

// int 의 범위  -2,147,483,648 ~2,147,483,647 내에서 무작위 수 발생
int randomInt01 = random.nextInt();
System.out.println("randomInt01 \t: " + randomInt01);



 2-2.  정수 Random (int)생성 - 범위지정

원하는 Bound(범위)내에서 랜덤 int 생성

// 0 ~ 99 사이의 Random int 값 생성
int randomInt02 = random.nextInt(100);
System.out.println("randomInt02 \t: " + randomInt02);

※ 0 ~ bound 의 범위 내에서 생성 (bound 값은 0 보다 큰 양의 값이 되어야 한다.)

※ Bound 값이 0을 포함한 음수의 값을 가지게 되면 아래와 같은 에러가 난다.

   -> java.lang.IllegalArgumentException: bound must be positive


※ 음수의 범위 내에 값을 생성하기 위해서는 양수 범위로 생성한 후 처리를 해주면 된다.

   -> ex) -0 ~ -99 의 값을 원할 경우 위에서 간단하게 결과 값에 -1을 곱해서 처리하는 식으로 하면된다.




 3.  각 자료형의 min~max 값에 대한 Random 값생성

long, float, double, boolean 값을 생성 할 수 있다.

// 데이터 형의 최소 ~ 최대 값으로 Random 데이터 생성
long randomLong = random.nextLong();
float randomFloat = random.nextFloat();
double randomDouble = random.nextDouble();
System.out.println("randomLong \t\t: " + randomLong);
System.out.println("randomFloat \t: " + randomFloat);
System.out.println("randomDouble \t: " + randomDouble);


 4.  byte Array에 임의(랜덤)의 byte값을 채우기

// 임의의 바이트 Array에 랜덤으로 byte 채우기
byte[] randomBytes = new byte[16];
random.nextBytes(randomBytes);
for (byte b : randomBytes) {
System.out.print(b + " ");
}


 5.  결과 출력

randomInt01 : -1068375961

randomInt02 : 69

randomLong : 1103435009130542788

randomFloat : 0.26886266

randomDouble : 0.11659966505403929

randomBoolean : false

randomBytes

63 18 29 24 -128 -120 -78 -89 125 -110 13 -30 124 -63 108 -24 





  Math 클래스와 비교


 1.  Math 클래스를 이용한 랜덤 값 생성 방법

int mathRandomInt = (int) Math.random() * 100;

위와 같이 생성하면 0~99의 int 값을 생성 할 수 있다.



 2.  Math vs Random

Math 내부의  random역시 Random 클래스를 이용하여 생성해준다.

public static double random() {
return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
}
private static final class RandomNumberGeneratorHolder {
static final Random randomNumberGenerator = new Random();
}


Math의 Random 함수 부분인데

Math클래스에서 Random 객체를 생성하기 때문에 여러번 반복 하거나 많은 횟수의 Random 작업이 이루어 질 경우 Math보다는 Random 객체를 생성하여 사용하는 것이 효율적이다.

또한, Random 클래스를 이용하여 다양한 범위의 랜덤범위와 추가 작업을 하는데 있어서도 유리하다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함