-
[Java] Math.random() vs java.util.Random 효율성 차이점 비교Java 2022. 1. 24. 00:01728x90
두 함수는 모두 난수를 생성합니다.
난수란?
정의된 범위 내에서 무작위로 추출된 수를 일컫는다.
난수는 누구라도 그다음에 나올 값을 확신할 수 없어야 한다.
하지만 컴퓨터 과학 분야에서 말하는 난수는 보통 결정론적인 방법에서 생성된 난수이다.
특정 입력이나 조건에 따라 무작위로 선택된 것처럼 보이는 난수 또는 난수 열이 생성되며 그 생성 조건이나 입력이 같다면 그 결괏값은 항상 같다.
즉, 프로그래밍에서 난수란 정말 무작위로 추출된 수가 아닌 시스템적으로 추측하기 어렵게 임의의 수를 만들어서 적용하는 것을 말합니다.
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()
https://todayscoding.tistory.com/19
https://needjarvis.tistory.com/616
728x90'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