-
[Java] Math.random() vs java.util.Random 효율성 차이점 비교Java 2022. 1. 24. 00:01반응형
두 함수는 모두 난수를 생성합니다.
난수란?
정의된 범위 내에서 무작위로 추출된 수를 일컫는다.
난수는 누구라도 그다음에 나올 값을 확신할 수 없어야 한다.
하지만 컴퓨터 과학 분야에서 말하는 난수는 보통 결정론적인 방법에서 생성된 난수이다.
특정 입력이나 조건에 따라 무작위로 선택된 것처럼 보이는 난수 또는 난수 열이 생성되며 그 생성 조건이나 입력이 같다면 그 결괏값은 항상 같다.
즉, 프로그래밍에서 난수란 정말 무작위로 추출된 수가 아닌 시스템적으로 추측하기 어렵게 임의의 수를 만들어서 적용하는 것을 말합니다.
java.lang.Math.random()
기본 숫자 연상을 수행하기 위한 Math 클래스의 메소드입니다.
0.0 <= a <= 1.0 사이의 양수인 double형 값을 반환합니다.
System.out.println(Math.random());
Math.random()은 내부적으로 java.util.Random 클래스에서 Random.nextDouble()을 사용합니다.
Random 클래스의 인스턴스 randomNumberGenerator를 생성합니다.
Random 클래스의 메서드인 nextDouble()을 사용합니다.
java.util.Random
이 클래스의 인스턴스는 의사 난수 스트림을 생성하는 데 사용됩니다.
Random random = new Random(); System.out.println(random.nextDouble());
차이점
Many applications will find the method Math.random() simpler to use.
Random 클래스의 jdk api에 적혀있는 문구입니다.
Math.random()이 더 사용하기 쉽다는 것을 인정합니다.
Math.random()은 0.0의 ~1.0 사이의 double을 반환하기 때문에 다른 범위의 값을 얻으려면 곱셈과 같은 연산에 의존해야 합니다.
java.util.Random 클래스를 사용한다면 double 이외의 유형을 쉽게 생성할 수 있지만 클래스 인스턴스를 선언하여 사용해야 합니다.
java.util.Random 클래스에는 setSeed 메서드를 통해 시드 값을 따로 설정해 줄 수 있다.(동일한 시드로 설정함으로써 다시 실행해도 값을 일정하게 받아올 수도 있음)
Math.random() 메서드는 static메서드로 이루어져 있어 따로 import 하지 않아도 바로 호출할 수 있다.
공통점
둘 다 threadsafe 하다.
난수를 생성한다.
효율성 비교
double형 난수 1억 번 호출
Math.random() 메서드가 20ms 더 빠르다.
int형 난수 1억 번 호출
형 변환과 곱 연산을 해야 하는 Math.random() 메서드가 2 배정도 느리다(400ms정도 차이)
출처
https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/Math.html#random()
Math (Java SE 16 & JDK 16)
public final class Math extends Object The class Math contains methods for performing basic numeric operations such as the elementary exponential, logarithm, square root, and trigonometric functions. Unlike some of the numeric methods of class StrictMath,
docs.oracle.com
https://todayscoding.tistory.com/19
컴퓨터에서 생성하는 난수는 진짜 난수가 아니다?
코드를 짜다보면 '난수'를 사용해야하는 경우가 많다. 습관적으로 Random클래스나 Math클래스의 random() 매소드를 쓰곤 했는데 정확한 차이를 모르고 썼는데, 알고리즘 공부를 하던 중 난수가 진짜
todayscoding.tistory.com
https://needjarvis.tistory.com/616
[Java] 랜덤함수 사용 및 속도 비교
불현듯, 자바에서 제공하는 랜덤함수의 속도 차이가 있을까 궁금해서 테스트를 해보기로 했다. 자바는 기본적으로 java.util.Random 클래스와 Math 클래스에서 제공하는 random이 있는데 둘의 차이점은
needjarvis.tistory.com
'Java' 카테고리의 다른 글
[Java] 싱글톤(Singleton)이란? (0) 2022.01.27 [Java] 메서드 참조란? (0) 2022.01.25 [Java] java.util.function 패키지란? (0) 2022.01.22 [Java] 래퍼 클래스(Wrapper Class)란? (0) 2022.01.20 [Java]람다식(Lambda expression)이란? (0) 2022.01.17