본문 바로가기
Development/Group Study

[Part 1] 섹션 3. 코드의 흐름 제어(1)

by Mobics 2025. 7. 24.

 

목차


    C#과 유니티로 만드는 MMORPG 게임 개발 시리즈

    25.07.23

    Part 1: C# 기초 프로그래밍 입문

     

    섹션 3. 코드의 흐름 제어

     

    if와 else

    : if문의 조건이 true일 때, 명령문을 실행한다. --> 위에서부터 순차적으로 조건을 확인하고, 조건에 충족하면 명령문을 실행하며 그 아래의 조건들은 건너뛴다.

    if (조건문)
    {
    	명령문
    }
    else if (조건문)
    {
    	명령문
    }
    else
    {
    	명령문
    }

     

    switch

    : switch의 조건식으로는 정수(int, bool, char) 또는 문자열(string) 타입만 사용 가능하다. --> C# 7.0 이상부터는 다른 객체도 넣을 수 있게 되었다.

    • 'default'를 사용하면 모든 case에 해당되지 않을 때 필요한 명령을 실행할 수 있다.
    • case 값은 변수가 될 수 없다. 즉, 고정된 값인 상수여야한다.
    switch (조건식)
    {
        case 값:
        	명령문
        	break;
        case 값:
        	명령문
        	break;
        default:
        	명령문
        	break;
    }
     

    if 및 switch 문 - 실행할 코드 경로 선택 - C# reference

    'if' 및 'switch' 문은 C#에서 분기 논리를 제공합니다. 'if, 'else' 및 'switch'를 사용하여 프로그램이 따르는 경로를 선택합니다.

    learn.microsoft.com

     

    ※ 삼항연산자

    condition ? consequent : alternative
    // 조건 ? 맞을 때 : 틀릴 때
    • condition 식은 true 또는 false로 계산되어야 합니다.
    • condition이 true : consequent 식이 계산되고 해당 결과가 연산 결과가 됩니다.
    • condition이 false : alternative 식이 계산되고 해당 결과가 연산 결과가 됩니다.
     

    ?: 연산자 - 3개로 구성된 조건 연산자 - C# reference

    부울 식의 결과를 기반으로 두 식 중 하나의 결과를 반환하는 3개로 구성된 C# 조건 연산자(`?:`)에 대해 알아봅니다.

    learn.microsoft.com

     

    가위-바위-보 게임

    • 0: 가위, 1: 바위, 2: 보
    • 컴퓨터는 랜덤으로 가위, 바위, 보 중에 하나를 내도록
    • 사용자의 입력을 받아 가위, 바위, 보 중에 하나를 내도록
    • 컴퓨터의 랜덤 값과 사용자의 입력에 따라 승리, 패배, 무승부를 판단하여 결과를 출력

     

    >> 컴퓨터가 랜덤한 값을 내도록

    : Random 클래스를 활용 --> Next(a, b); 는 a 이상 b 미만의 값을 랜덤으로 반환한다.

    Random rand = new Random();
    int aiChoice = rand.Next(0, 3);

     

    >> 사용자의 입력을 받기

    : 'Console.ReadLine();'로 입력을 받은 후, 받은 값을 int로 변환시켜준다.

    int choice = Convert.ToInt32(Console.ReadLine());
    // int choice = int.Parse(Console.ReadLine());

     

    >> 컴퓨터와 사용자가 각각 낸 것을 출력

    : switch문을 활용

    switch (choice)
    {
        case 0:
            Console.WriteLine("당신의 선택은 가위입니다.");
            break;
        case 1:
            Console.WriteLine("당신의 선택은 바위입니다.");
            break;
        case 2:
            Console.WriteLine("당신의 선택은 보입니다.");
            break;
    }
    
    switch (aiChoice)
    {
        case 0:
            Console.WriteLine("컴퓨터의 선택은 가위입니다.");
            break;
        case 1:
            Console.WriteLine("컴퓨터의 선택은 바위입니다.");
            break;
        case 2:
            Console.WriteLine("컴퓨터의 선택은 보입니다.");
            break;
    }

     

    >> 결과 출력

    : if문을 활용

    if (choice == aiChoice)
    {
        Console.WriteLine("무승부입니다.");
    }
    else if (choice == 0 && aiChoice == 2)
    {
        Console.WriteLine("승리입니다.");
    }
    else if (choice == 1 && aiChoice == 0)
    {
        Console.WriteLine("승리입니다.");
    }
    else if (choice == 2 && aiChoice == 1)
    {
        Console.WriteLine("승리입니다.");
    }
    else
    {
        Console.WriteLine("패배입니다.");
    }

     

    >> 최종 코드

    namespace First
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 0: 가위, 1: 바위, 2: 보
    
                Random rand = new Random();
                int aiChoice = rand.Next(0, 3);
                int choice = Convert.ToInt32(Console.ReadLine());
    
                switch (choice)
                {
                    case 0:
                        Console.WriteLine("당신의 선택은 가위입니다.");
                        break;
                    case 1:
                        Console.WriteLine("당신의 선택은 바위입니다.");
                        break;
                    case 2:
                        Console.WriteLine("당신의 선택은 보입니다.");
                        break;
                }
    
                switch (aiChoice)
                {
                    case 0:
                        Console.WriteLine("컴퓨터의 선택은 가위입니다.");
                        break;
                    case 1:
                        Console.WriteLine("컴퓨터의 선택은 바위입니다.");
                        break;
                    case 2:
                        Console.WriteLine("컴퓨터의 선택은 보입니다.");
                        break;
                }
    
                if (choice == aiChoice)
                {
                    Console.WriteLine("무승부입니다.");
                }
                else if (choice == 0 && aiChoice == 2)
                {
                    Console.WriteLine("승리입니다.");
                }
                else if (choice == 1 && aiChoice == 0)
                {
                    Console.WriteLine("승리입니다.");
                }
                else if (choice == 2 && aiChoice == 1)
                {
                    Console.WriteLine("승리입니다.");
                }
                else
                {
                    Console.WriteLine("패배입니다.");
                }
            }
        }
    }

     

    상수와 열거형

    >> 상수

    : 상수는 해당 값이 컴파일 시간에 설정되며 변경할 수 없는 필드로, 'const'를 붙여 사용한다.

    --> 상수를 사용하여 특수 값에 대해 숫자 리터럴(“매직 넘버”) 대신 의미 있는 이름을 제공할 수 있다.

    --> 하드코딩을 방지하고 코드 수정이 용이해지는 장점이 있다.

    const int SCISSORS = 0;
    const int ROCK = 1;
    const int PAPER = 2;
     

    상수 정의 방법 - C#

    컴파일 시간에 값이 설정되는 필드인 C#에서 상수를 정의하는 방법에 대해 알아봅니다. 상수를 사용하여 특수 값에 의미 있는 이름을 제공합니다.

    learn.microsoft.com

     

    >> 열거형

    : 열거형은 기본 정수 숫자 형식의 명명된 상수 집합에 의해 정의된 값 형식이다. 열거형 형식을 정의하려면 키워드를 enum 사용하고 열거형 멤버의 이름을 지정한다. --> 열거형을 선언할 때는 main 함수 밖에, class 안에 선언한다.

    • 서로 연관성이 있는 여러 값을 하나로 묶을 수 있는 장점이 있다.
    • 값을 따로 지정하지 않으면 기본적으로 0부터 1씩 증가하며 지정된다.
    enum Choice
    {
        Rock = 1,
        Paper = 2,
        Scissors = 0
    }

     

     

    --> case에서 사용할 때, 지정된 값이 int가 아니라 enum이기 때문에 int로 형변환을 시켜줘야 한다.

    switch (choice)
    {
        case (int)Choice.Scissors:
            Console.WriteLine("당신의 선택은 가위입니다.");
            break;
        case (int)Choice.Rock:
            Console.WriteLine("당신의 선택은 바위입니다.");
            break;
        case (int)Choice.Paper:
            Console.WriteLine("당신의 선택은 보입니다.");
            break;
    }
     

    열거형 형식 - C# reference

    선택 항목 또는 선택 항목의 조합을 나타내는 C# 열거형 형식에 대해 알아봅니다.

    learn.microsoft.com

    'Development > Group Study' 카테고리의 다른 글

    [Part 1] 섹션 4. TextRPG  (1) 2025.07.26
    [Part 1] 섹션 3. 코드의 흐름 제어(2)  (3) 2025.07.25
    [Part 1] 섹션 2. 데이터 갖고 놀기  (4) 2025.07.23