C#에서 Random.NextDouble() 메서드는 0.0보다 크거나 같고 1.0보다 작은 부동 소수점(double) 난수를 반환하는 데 사용됩니다. 반환 범위는 [0.0, 1.0)이며, 시뮬레이션, 게임 개발, 통계 처리 등 무작위 값이 필요한 다양한 상황에서 활용할 수 있습니다.
구문(Syntax)
메서드의 기본 구문은 다음과 같습니다.
public virtual double NextDouble ();
이 메서드는 매개변수를 받지 않으며, 호출할 때마다 double 형식의 난수 하나를 반환합니다.
예제 1: 기본 사용법
다음 예제는 NextBytes()로 바이트 배열에 난수를 채운 뒤, NextDouble()로 부동 소수점 난수 5개를 생성하는 코드입니다.
using System;
public class Demo {
public static void Main(){
Random r1 = new Random();
Random r2 = new Random();
Byte[] arr = new Byte[2];
r1.NextBytes(arr);
Console.WriteLine("바이트 배열의 난수...");
for (int i = 0; i < 2; i++)
Console.WriteLine(arr[i]);
Console.WriteLine("\n부동 소수점 난수...");
for (int i = 0; i < 5; i++)
Console.WriteLine(r2.NextDouble());
}
}출력 결과
프로그램을 실행하면 아래와 같은 결과가 출력됩니다. 난수 특성상 실행할 때마다 값은 달라집니다.
바이트 배열의 난수... 124 141 부동 소수점 난수... 0.93591266727816 0.36406785872023 0.122396959514542 0.795166163144245 0.954394097884369
예제 2: 난수 분포 확인하기
다음 예제는 NextDouble()을 50번 호출해 생성된 난수를 구간별로 분류하고, 각 구간의 빈도를 집계하는 코드입니다.
using System;
public class Demo {
public static void Main(){
int[] val = new int[7];
Random r = new Random();
double d;
for (int i = 0; i < 50; i++) {
d = r.NextDouble();
val[(int) Math.Ceiling(d*5)] ++;
}
Console.WriteLine("난수 분포 결과...");
for (int i = 0; i < 7; i++)
Console.WriteLine(val[i]);
}
}출력 결과
난수 분포 결과... 0 13 9 12 8 8 0
실행할 때마다 수치는 달라지지만, 난수가 각 구간에 비교적 고르게 분포하는 것을 확인할 수 있습니다. 배열의 첫 번째와 마지막 요소가 0인 이유는 Math.Ceiling(d * 5)의 계산 결과가 항상 1부터 5 사이의 정수가 되기 때문입니다.
마무리
Random.NextDouble()은 [0.0, 1.0) 범위의 난수를 간편하게 생성할 수 있는 메서드입니다. 특정 범위의 난수가 필요하다면 반환값에 범위 크기를 곱하고 최솟값을 더하면 됩니다. 예를 들어 min 이상 max 미만의 난수는 min + r.NextDouble() * (max - min) 형태로 손쉽게 얻을 수 있으니, 실무에서 다양하게 응용해 보시기 바랍니다.