본문 바로가기
  • BLG-ZYNGIROK-모토-꿈꾸며-배우고-나누며-이루다
ICT/Java

Java | Math 클래스의 random() 메서드를 이용해 랜덤 번호 생성 방법

by dazwischen 2023. 2. 13. 17:01
반응형

Java에서 랜덤 번호를 생성하는 방법에 대한 글이다.

자바에서 랜덤 번호 생성하기

일상생활에선 랜덤 번호가 필요하다면 로또나 경품추첨 정도 일텐데 프로그래밍에선 굉장히 자주 다양한 곳에서 사용한다. 본 글에서는 자바에서 랜덤번호를 어떻게 생성하는지 살펴보려고 한다.

Java random 임의의 수 추출

Math.random()로 만드는 난수

일단 랜덤 번호를 생성하기 위해서 필요한 절대 함수는 Math 클래스의 random() 함수이다. 보통은 Math.random()로 주로 사용한다. Math.random()의 특징은 0에서 1가이의 소수를 계속 임의로 만들어 낸다는 것이다. 좀 더 깊게 보자면 그 소수를 만드는 공식도 있겠지만 사용자 입장에선 이정도만 알면 충분하다.

Math.random()은 0부터~1사이의 임의의 소수를 생성한다. 0은 포함하고 1은 포함하지 않는다.

그럼 아래와 같은 수들이 나타날 것이다.

0.1231235312357189375932...
0.328745824759872932748....
0.437583745895734988320...

여기서 딱 10을 곱하면 어떻게 될까?

1.231235312357189375932...
3.28745824759872932748....
4.37583745895734988320...

벌써 눈치 챘을 수도 있다. 임의로 발생한 0과 1사이의 수에서 10을 곱하면 0과 10사이의 소수들이 발생한다. 여기서 소수점 아래의 값을 버리면 어떻게 될까?

1
3
4

이제 원리는 끝났다. 코드를 살펴보도록 하자.

임의의 수를 추출하는 자바 코드

Math.random(); // 0~1 사이의 소수값들이 발생

Math.random()*10; // 0~10 사이의 실수값들이 발생

Math.floor(Math.random()*10); // 소수점 밑의 값들은 버리고 0~10 사이의 정수만 남는다.

응용 1 - Java의 형변환

여기서 조금 더 간단하게 난수를 만드는 방법이 있다. 엄청 간단해 지는 건 아니고 위의 방법에서 함수 하나의 사용을 줄이는 것이다. 마지막 floor()를 사용하지 않고 앞에 간단히 (int)만 붙여줘 정수로 형변환을 한다. 그럼 위와 똑같이 소수점 밑의 값들은 버려지고 정수부분만 남는다.

(int)Math.random()*10;

응용2 - 원하는 구간내의 임의의 수 추출

위에서 0에서 10사이에 값을 추출하기 위해 10을 곱했다. 이건 단순히 소숫점 첫째값을 1의 자리수로 올리는 것만 의미한 건 아니고 0에서 1사이의 값을 10배 키워서 0과 10사이의 수를 만드는 것을 의미하기도 한다. 다시 말해서 6을 곱하면 0에서 6사이의 값. 31을 곱하면 0과 31사이의 값이 만들어 진다. 만약에 로또 번호를 추출해 보고 싶다면 45를 곱해보자. 물론 이 경우에 중복되는 숫자가 나올 수 있긴 하지말 말이다.

// 1에서 45 사이의 임의의 정수 추출
(int)Math.random()*45+1;

여기서 마지막 왜 1을 더해줬는지 알겠는가? 여태까지 설명을 0에서부터 시작하는 수를 얘기 했다. 여기서 1부터 시작하는 수를 원한다면 모든 자리에서 1을 더해주면 된다. 그래서 45를 곱하면 45는 포함이 안되지만 1을 더하면 45까지 나오게 된다.

반응형

댓글