Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Random.Next() 메서드 완벽 정리 – 난수 생성 방법과 활용 예제

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를 사용하는 것이 권장됩니다.