티스토리 뷰

[자바] 랜덤 숫자 생성하기



자바에서는 기본적으로 랜덤 숫자를 생성하는 2가지 방법이 있다.

  • double Math.random()
  • java.util.Random class

: 그냥 간단하게 랜덤 숫자를 만들때에는 위의 Math.random()을 사용하면 좋지만, 함수 정의를 보면 알겠지만 synchronized를 이용한다. 멀티쓰레드 프로그램을 이용한다면 Math.random()을 자주 이용한다면 성능에 영향을 미칠수 밖에 없을 것이다.

: Math.random()은 0 ~ 1 사이의 double을 랜덤으로 생성한다. 범위에 맞게 수정해서 사용하면 된다.


함수의 설명에 나와있듯이 멀티쓰레드에서 보다 나은 성능을 위해서는 각 쓰레드 안에서 Random을 생성하는 것이 성능에 유리하다.


Random randomGenerator = new Random();

int randomInteger = randomGenerator.nextInt(100); //0 ~ 99 사이의 int를 랜덤으로 생성

int randomIntegerUniform = randomGenerator.nextInt(); // int를 랜덤으로 생성

long randomLongUniform = randomGenerator.nextLong(); // long을 랜덤으로 생성

double randomDouble = randomGenerator.nextDouble(); // 0.0 ~ 1.0 사이의 double을 랜덤으로 생성 (1.0은 안나옴)

float randomDouble = randomGenerator.nextFloat(); // 0.0 ~ 1.0 사이의 float를 랜덤으로 생성 (1.0은 안나옴)

boolean randomBoolean = randomGenerator.nextBoolean(); //true, false를 랜덤으로 생성

double randomGaussianDouble =  randomGenerator.nextGaussian(); // 평균 0, 표준편차1의 분포에 따른 랜덤 double 생성

byte[] randomBytes = new byte[10];

randomGenerator.nextBytes(randomBytes); //randomBytes의 크기만큼 랜덤 바이트를 생성


위의 함수들을 각각 용도에 맞게 사용하면 된다.


만약 5 ~ 10 사이의 랜덤 수를 생성하고 싶다면 아래처럼 하면 된다.

int start = 5;

int end = 10;

double range = end - start + 1;

int randomInt5to10 = (int)(randomGenerator.nextDouble() * range + start);


0에서부터 0.9999999 까지 나오는 것을 고려해보면 위의 수식을 간단하게 이해할 수 있을 것이다.



끝.



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