C# 상수와 열거형

Mr.Seo·2025년 12월 16일

C# 기초문법

목록 보기
4/15

상수와 열거형에 대해

const int ROCK = 1;
const int PAPER = 2;
const int SCISSORS = 0;
// 0 : 가위  1: 바위    2: 보

Random rand = new Random();
int aiChoice = rand.Next(0, 3); // 컴퓨터의 선택 : 0 ~ 2사이의 랜덤 값
int choice = Convert.ToInt32(Console.ReadLine()); // 사용자의 선택
Console.WriteLine();

switch (choice) // 사용자의 선택
{
    case SCISSORS:
        Console.WriteLine("당신의 선택은 가위 입니다.");
        break;
    case ROCK:
        Console.WriteLine("당신의 선택은 바위 입니다.");
        break;
    case PAPER:
        Console.WriteLine("당신의 선택은 보 입니다.");
        break;
}

switch (aiChoice) // 컴퓨터의 선택
{
    case SCISSORS:
        Console.WriteLine("컴퓨터의 선택은 가위 입니다.");
        break;
    case ROCK:
        Console.WriteLine("컴퓨터의 선택은 바위 입니다.");
        break;
    case PAPER:
        Console.WriteLine("컴퓨터의 선택은 보 입니다.");
        break;
}

// 승리 무승부 패배
if (choice == aiChoice)
    Console.WriteLine("무승부 입니다.");
else if (choice == SCISSORS && aiChoice == PAPER)
{
    Console.WriteLine("승리 입니다");
}
else if (choice == ROCK && aiChoice == SCISSORS)
{
    Console.WriteLine("승리 입니다");
}
else if (choice == PAPER && aiChoice == ROCK)
{
    Console.WriteLine("승리 입니다");
}
else
{
    Console.WriteLine("패배 입니다");
}
  • 일단 전에 배운 가위,바위,보 프로그램에서 0 ~ 2 의 정수를 넣는 하드 코딩은 게임을 개발할때 굉장히 위험한 경우가 많고 사용할때 헷갈리는 경우가 생기게 된다.

  • 그래서 정수 말고 위의 예제처럼 변수에 이름을 넣어서 사용을 하게 되는데 이때 그냥 int값을 쓰게 되면 에러가 뜨게 된다 왜냐하면 switch 케이스에 들어올 때 이 케이스문에 들어오는 숫자는 변수는 안되고 고정된 상수 값만 받을수 있기 때문에 const 를 선언하여 상수로 바꿔주고 사용해야 한다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Rookiss_Basic_01
{
    internal class Program
    {
        enum Choice // 열거형
        {
            Rock = 1,
            Paper = 2,
            Scissors = 0,
        }

        static void Main(string[] args)
        {
            // 0 : 가위  1: 바위    2: 보

            Random rand = new Random();
            int aiChoice = rand.Next(0, 3); // 컴퓨터의 선택 : 0 ~ 2사이의 랜덤 값
            int choice = Convert.ToInt32(Console.ReadLine()); // 사용자의 선택
            Console.WriteLine();

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

            switch (aiChoice) // 컴퓨터의 선택
            {
                case (int)Choice.Scissors:
                    Console.WriteLine("컴퓨터의 선택은 가위 입니다.");
                    break;
                case (int)Choice.Rock:
                    Console.WriteLine("컴퓨터의 선택은 바위 입니다.");
                    break;
                case (int)Choice.Paper:
                    Console.WriteLine("컴퓨터의 선택은 보 입니다.");
                    break;
            }

            // 승리 무승부 패배
            if (choice == aiChoice)
                Console.WriteLine("무승부 입니다.");
            else if (choice == (int)Choice.Scissors && aiChoice == (int)Choice.Paper)
            {
                Console.WriteLine("승리 입니다");
            }
            else if (choice == (int)Choice.Rock && aiChoice == (int)Choice.Scissors)
            {
                Console.WriteLine("승리 입니다");
            }
            else if (choice == (int)Choice.Paper && aiChoice == (int)Choice.Rock)
            {
                Console.WriteLine("승리 입니다");
            }
            else
            {
                Console.WriteLine("패배 입니다");
            }
        }
    }
}
  • 또 다른 방법은 열거형을 사용하는 방법이다.
  • 저렇게 int 변수에 값을 넣어서 사용할 수 있겠지만 switch 안에 들어갈 변수가 많아지게 된다면 관리하기 힘들수 있다.
  • 그래서 이때는 enum 열거형을 선언하여 열거형 안에 사용할 정수들을 넣고 필요한 데이터에서 사용해주면 유지보수도 좋고 사람이 할 수 있는 실수를 줄일수 있게 된다.
profile
프로그래머 취준생

0개의 댓글