C#에서 Random.Next() 메서드는 음수가 아닌(non-negative) 임의의 정수, 즉 난수를 반환하는 데 사용됩니다. 게임 개발, 시뮬레이션, 샘플링 등 다양한 분야에서 무작위 숫자가 필요할 때 가장 널리 쓰이는 기본 메서드입니다.
구문(Syntax)
Random.Next() 메서드는 여러 오버로드 형태로 제공됩니다. 기본적인 구문은 다음과 같습니다.
public virtual int Next (); public virtual int Next (int maxVal);
maxVal 매개변수는 생성할 난수의 상한값(exclusive upper bound)을 의미합니다. 즉, 반환되는 값은 0 이상 maxVal 미만 범위에 속하며, maxVal 자체는 포함되지 않습니다. 예를 들어 Next(10)을 호출하면 0부터 9 사이의 정수가 반환됩니다.
기본 사용 예제
다음은 Random 클래스의 인스턴스를 생성하고 Next() 메서드로 무작위 정수를 출력하는 간단한 예제입니다.
using System;
public class Demo {
public static void Main(){
Random r = new Random();
Console.WriteLine("Random numbers.....");
for (int i = 1; i <= 5; i++)
Console.WriteLine(r.Next());
}
}실행 결과
위 코드를 실행하면 다음과 같이 0부터 int.MaxValue 사이의 무작위 정수가 5개 출력됩니다. 실행할 때마다 결과는 달라집니다.
Random numbers..... 1014639030 1510161246 1783253715 487417801 249480649
상한값 지정 예제
이번에는 두 개의 Random 인스턴스를 만들어, 하나는 전체 범위의 난수를, 다른 하나는 0부터 9 사이의 난수를 생성하는 예제입니다.
using System;
public class Demo {
public static void Main(){
Random r = new Random();
Random r2 = new Random();
Console.WriteLine("Random numbers.....");
for (int i = 1; i <= 5; i++)
Console.WriteLine(r.Next());
Console.WriteLine("\nRandom numbers from 1 to 10.....");
for (int i = 1; i <= 5; i++)
Console.WriteLine(r2.Next(10));
}
}실행 결과
실행하면 첫 번째 반복문에서는 제한 없는 난수가, 두 번째 반복문에서는 0~9 범위의 난수가 각각 출력됩니다.
Random numbers..... 613432308 1705125884 1787561614 1243383842 2016323534 Random numbers from 1 to 10..... 2 7 8 5 9
추가로 알아두면 좋은 점
Next() 메서드는 세 번째 오버로드인 Next(int minValue, int maxValue)도 지원합니다. 이를 사용하면 최솟값과 최댓값을 모두 지정해 원하는 범위의 난수를 얻을 수 있습니다. 예를 들어 r.Next(1, 11)은 1부터 10까지의 정수를 반환합니다.
또한 주의할 점으로, 짧은 시간 간격으로 여러 개의 Random 인스턴스를 연속해서 생성하면 시드(seed)가 동일하게 설정되어 같은 난수 시퀀스가 나올 수 있습니다. 실무에서는 하나의 Random 인스턴스를 재사용하거나, .NET 6 이상에서는 스레드 안전성이 보장된 Random.Shared를 사용하는 것이 권장됩니다.