<개인공부>/[C#]

[C#] random, 랜덤 클래스에 대해서 (랜덤함수, 난수생성)

BlockDMask 2019. 5. 8. 00:04
반응형

안녕하세요!! BlockDMask 입니다.

오늘은 C#의 random(랜덤), 난수생성에 대해서 알아볼 것 입니다.

C/C++에서의 랜덤(srand, rand, time)과는 달리 C#에서는 매우 편하게 random(랜덤)한 수를 가지고 올 수 있는데요, 어떻게 구하는것인지 한번 알아보러 고고 해봅시다.


※ C/C++의 random(랜덤), 난수생성 [바로가기]


1. C# random(랜덤) 클래스에 대해서.


마소에서 만든 C#언어에는 사용자(=개발자)를 위해서 매우 많은 클래스들을 정의해 놓고 있는데요.

랜덤 또한 마찬가지로 만들어져 있습니다. 그이름은 바로 "Random Class" (소리질러!)


쓸데없는 미사여구는 이제 치우고 바로 클래스의 구조를 살펴보고 핵심 메서드(=멤버함수) 사용하는 방법에 대해서 알아보겠습니다.

(아 이게 쓸데없는 미사여구인가)


▼ Random Class

랜덤 클래스가 정의 되어있는 곳을 살펴보면 아래 캡쳐와 같습니다.

**메서드는 C/C++에서 멤버 함수를 말합니다.


1. 랜덤클래스는 System 네임스페이스 안에 속해있습니다. 

: Random 클래스는 namespace System 괄호 안에 존재합니다. Systen 네임스페이스는 C# 파일을 만들면 자동으로 포함되어있기 때문에 Random 클래스를 사용하기 위해서 특별히 무언가를 추가한다거나 할 필요가 없습니다.

: C#파일 맨위에 using System; 이 작성되어있을 것 입니다. 없다면 작성하면 됩니다.


2. 랜덤클래스 객체를 생성하는 방법 (생성자)

: Random 변수명 = new Random();

: new 키워드와 생성자를 이용해서 Random 타입의 객체를 생성합니다.


3. 랜덤클래스의 Next() 메서드

: Next() 메서드는 임의의 정수를 반환하는 메서드(멤버 함수) 입니다. (음수는 나오지 않음, n>=0)

: Random rand = new Random();

: int a = rand.Next();                  //a에는 임의의 랜덤한 숫자가 들어가게 됩니다.


4. 랜덤클래스의 Next(int minValue, int maxValue) 메서드

: Next(int minValue, int MaxValue)는 min~max 사이의 임의의 랜덤한 수를 반환하는 메서드 입니다. (min이상, max미만)

: Random rand = new Random();

: int a = rand.Next(1, 5);            //변수 a에는 1 이상 ~5 미만 사이의 임의의 수가 들어옵니다. (1, 2, 3, 4)


5. 랜덤클래스의 Next(int maxValue) 메서드

: Next(int maxValue) 함수는 max보다 작은 임의의 정수를 반환하는 메서드 입니다. (음수는 나오지 않음, n>=0)

: Random rand = new Random();

: int a = randNext(5);                //변수 a에는 5보다 작은 음이아닌 정수가 들어옵니다. (0, 1, 2, 3, 4, 5)


6. 랜덤클래스의 NextBytes(byte[] buffer); 메서드

: NextBytes(byte[] buffer)는 byte 타입의 배열에 random한 값을 채워 넣는 메서드 입니다.

: Random rand = new Random();

: Byte[] arrByte = new Byte[5];

: rand.NextBytes(arrByte);        //배열 arrByte 모든 요소에 각각 랜덤한 값을 넣어줍니다.

: 배열 요소에 넣어주는 값의 범위는 당연하게도, 0~바이트타입(부호 없는 8비트 정수)의 최대 크기 입니다.


7. 랜덤클래스의 NextDouble(); 메서드

: NextDouble()은 double 타입의 임의의 수를 반환하는 메서드 입니다.

: Random rand = new Random();

: double d = rand.NextDouble();       // 0.0~1.0 사이의 double 타입 수를 random 하게 반환합니다.


2. C# random(랜덤) 예제 및 사용법


namespace RandomExample { class Program { main을 포함해야하는 왼쪽 것은 코드가 오른쪽으로 길어지기 때문에 생략하였습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//C# Random Class Example. BlockDMask.
using System;
static void Main(string[] args)
{
    Random rand = new Random();
 
    //1. Next()
    Console.WriteLine("1. Next()");
    for (int i=0; i < 10++i)
    {
        int a = rand.Next();
        Console.WriteLine("Next() : " + a);
    }
 
    //2. Next(min, max)
    Console.WriteLine("\n2. Next(min, max)");
    for (int i = 0; i < 10++i)
    {
        int a = rand.Next(15);
        Console.WriteLine("Next(1, 5) : " + a);
    }
 
    //3. Next(max)
    Console.WriteLine("\n3. Next(max)");
    for (int i = 0; i < 10++i)
    {
        int a = rand.Next(5);
        Console.WriteLine("Next(5) : " + a);
    }
 
    //4. 응용1 (배열안의 랜덤)
    Console.WriteLine("\n4. 문자열 배열의 랜덤 index를 가지고 오기");
    string[] str = { "BlockDMask""Random""C# example""Blog""Programmer" };
    for (int i = 0; i < 10++i)
    {
        //randomIndex는 str.Length 보다 작은 음이 아닌 정수를 반환하기 때문에,
        //랜덤값을 배열의 index로 바로 사용해도 상관없는 상황이 됩니다.
        int randomIndex = rand.Next(str.Length);    //Next(Max).
        Console.WriteLine("randomIndex = {0}, str[randomIndex] = {1}", randomIndex, str[randomIndex]);
    }
 
    //5. NextBytes(byte[] buffer)
    Console.WriteLine("\n5. NextBytes(byte[] buffer)");
    byte[] arrByte = new byte[5];
    rand.NextBytes(arrByte);        //한번 호출에 배열 모든 요소 랜덤값 세팅
 
    for (int i = 0; i < arrByte.Length; ++i)
    {
        Console.WriteLine("arrByte[{0}] : {1}", i, arrByte[i]);
    }
 
    //6. NextDouble()
    Console.WriteLine("\n6. NextDouble()");
 
    for (int i = 0; i < 10++i)
    {
        double d = rand.NextDouble();
        Console.WriteLine("NextDouble() : " + d);
    }
}
cs



▲C# Random 예제의 결과 입니다.

1. Next();

2. Next(1, 5);

3. Next(5);

4. Next(스트링길이);

5. NextBytes(byte[] buffer);

6. NextDouble();

이었고, 프로그램을 실행을 할때마다 랜덤한 값이 나오게 됩니다.


끝까지 읽어주셔서 감사합니다.

반응형