[C#] Random 클래스와 사용 방법

지즈·2024년 12월 25일

CSharp

목록 보기
3/3

Random 클래스란?

System.Random은 .NET에서 랜덤 숫자를 생성하기 위한 클래스다.

숫자를 생성하는 알고리즘은 의사난수(pseudorandom number)를 기반으로 한다. 정해진 알고리즘에 따라 생성되어 진짜 랜덤은 아니지만 랜덤처럼 보이게 된다.


Random 인스턴스 생성

Random rand = new Random();으로 Random 클래스의 새 인스턴스를 생성한다. 생성자 호출 시, 내부적으로 시간 기반의 기본 시드(seed)를 사용하여 난수 생성기를 초기화한다.

  • 시드는 난수 생성의 시작점을 결정한다.
  • 예: 동일한 시드 값으로 초기화하면 동일한 순서의 난수를 생성하게 된다.

난수 생성 방법

rand 객체를 사용해 다양한 난수를 생성할 수 있다.

정수 난수 생성 (Next)

  • rand.Next(): 0 이상 Int32.MaxValue 미만의 정수를 반환.
  • rand.Next(maxValue): 0 이상 maxValue 미만의 정수를 반환.
  • rand.Next(minValue, maxValue): minValue 이상 maxValue 미만의 정수를 반환.
int randomNumber = rand.Next(); // 임의의 정수
int randomBetween0And9 = rand.Next(10); // 0부터 9 사이
int randomBetween10And20 = rand.Next(10, 21); // 10부터 20 사이

실수 난수 생성 (NextDouble)

  • rand.NextDouble(): 0.0 이상 1.0 미만의 부동소수점(double)을 반환.
double randomDouble = rand.NextDouble(); // 0.0 <= x < 1.0

랜덤 값을 원하는 범위로 변환

  • 부동소수점 값을 특정 범위로 확장:
double randomInRange = rand.NextDouble() * (maxValue - minValue) + minValue;



주의할 점

  1. Random 인스턴스를 반복 생성하면 문제 발생 가능

    new Random()이 호출될 때 기본적으로 현재 시간을 기준으로 시드를 설정하므로, 짧은 시간 동안 여러 개의 Random 객체를 생성하면 같은 시드 값을 갖게 되어 동일한 난수 값이 반복될 수 있다. 이 때, 프로그램에서 하나의 Random 객체를 공유하거나 ThreadLocalRandom을 사용하는 것이 좋다.

  2. 멀티스레드 환경에서 주의

    Random은 멀티스레드 환경에서 안전하지 않다. 스레드마다 별도의 난수 생성기를 사용하거나 System.Security.Cryptography.RandomNumberGenerator를 사용하는 것이 좋다.



예제

using System;

class Program
{
    static void Main()
    {
        Random rand = new Random();

        // 정수 난수
        Console.WriteLine(rand.Next()); // 0 이상 임의의 정수
        Console.WriteLine(rand.Next(10)); // 0 이상 10 미만
        Console.WriteLine(rand.Next(10, 20)); // 10 이상 20 미만

        // 실수 난수
        Console.WriteLine(rand.NextDouble()); // 0.0 이상 1.0 미만

        // 범위를 지정한 실수 난수
        double randomInRange = rand.NextDouble() * (100 - 50) + 50; // 50.0 이상 100.0 미만
        Console.WriteLine(randomInRange);
    }
}
profile
클라이언트 개발자가 되는 그 날까지 킵 고잉

0개의 댓글