C# 열거형: 열거형 타입에 대한 친절한 안내서
안녕하세요, 미래의 코딩 슈퍼스타 여러분! 오늘 우리는 C#의 fascineling 세계, 즉 열거형(enumerated types)에 빠져들어 보겠습니다. 이전에 들어본 적이 없으시다면 걱정 마세요 - 이 튜토리얼이 끝나면 열거형 전문가가 될 것입니다! 그럼 이 흥미로운 여정을 함께 시작해 보겠습니다.
열거형이란?
상상해 보세요. 여러분이 만드는 게임에서 플레이어들이 다양한 캐릭터 클래스를 선택할 수 있다면 어떨까요? 전사, 마법사, 궁수, 치료사 등이 있을 수 있습니다. 이러한 옵션들을 코드에서 어떻게 표현할까요? 이제 열거형이 구원자로 등장합니다!
열거형(enumerate, 줄여서 enum)은 C#에서 특정한 이름을 가진 상수 집합을 정의할 수 있는 특별한 타입입니다. 마치 고정된 값들의 집합을 가진 커스텀 타입을 만드는 것입니다. 멋지지 않나요?
열거형을 사용하는 이유
- 코드가 더 읽기 쉬워집니다.
- 사전 정의된 선택지로 오류를 방지할 수 있습니다.
- 카테고리나 옵션을 표현하는 데 최적입니다.
열거형 선언
기본적인 내용으로 시작해 보겠습니다. 다음은 열거형을 선언하는 방법입니다:
enum CharacterClass
{
Warrior,
Mage,
Archer,
Healer
}
이 예제에서 우리는 CharacterClass
라는 이름의 열거형을 생성했으며, 네 가지 가능한 값을 가집니다. 기본적으로 C#은 각 열거형 멤버에 정수 값을 할당하며, 0부터 시작합니다.
코드에서 열거형 사용하기
이제 우리가 선언한 열거형을 코드에서 어떻게 사용할 수 있는지 보겠습니다:
class Program
{
static void Main(string[] args)
{
CharacterClass myClass = CharacterClass.Warrior;
Console.WriteLine($"My character class is: {myClass}");
}
}
이 코드를 실행하면 다음과 같은 출력이 나타납니다:
My character class is: Warrior
이게 멋지지 않나요? 우리는 CharacterClass
타입의 변수를 생성하고 Warrior
값을 할당했습니다. 마치 캐릭터에게 신분증을 주는 것과 같습니다!
열거형 값과 캐스팅
열거형이 정수 값으로 할당된다는 것을 언급했还记得? 그것을 조금 더 탐구해 보겠습니다:
Console.WriteLine($"Warrior value: {(int)CharacterClass.Warrior}");
Console.WriteLine($"Mage value: {(int)CharacterClass.Mage}");
Console.WriteLine($"Archer value: {(int)CharacterClass.Archer}");
Console.WriteLine($"Healer value: {(int)CharacterClass.Healer}");
이렇게 하면 다음과 같은 출력이 나타납니다:
Warrior value: 0
Mage value: 1
Archer value: 2
Healer value: 3
우리는 캐스팅을 사용하고 있습니다 (그"(int)
부분이做的就是 그거입니다) 열거형 값을 정수로 변환합니다. 마치 C#이 우리의 열거형을 어떻게 조직하는지 뒤에서 볼 수 있는 것입니다!
커스텀 열거형 값
하지만 기다리세요, 그 이상이 있습니다! 열거형 멤버에 특정 값을 할당하고 싶다면 어떻게 하죠? 그것도 할 수 있습니다:
enum CharacterClass
{
Warrior = 1,
Mage = 5,
Archer = 10,
Healer = 15
}
이제 우리가 이전에 사용한 코드를 실행시키면 다음과 같은 출력이 나타납니다:
Warrior value: 1
Mage value: 5
Archer value: 10
Healer value: 15
이것은 게임이나 애플리케이션에서 특정 숫자와 일치시키기 위해 열거형 값을 사용할 때 유용할 수 있습니다.
열거형과 스위치 문
열거형과 스위치 문은 마치 펜과 잉크처럼 잘 맞아떨어집니다! 다음은 예제입니다:
static void DescribeClass(CharacterClass characterClass)
{
switch (characterClass)
{
case CharacterClass.Warrior:
Console.WriteLine("You are a brave warrior, strong in combat!");
break;
case CharacterClass.Mage:
Console.WriteLine("You are a wise mage, master of arcane arts!");
break;
case CharacterClass.Archer:
Console.WriteLine("You are a skilled archer, deadly at a distance!");
break;
case CharacterClass.Healer:
Console.WriteLine("You are a compassionate healer, keeper of life!");
break;
default:
Console.WriteLine("Unknown class. Are you a secret class?");
break;
}
}
이 함수를 다음과 같이 사용할 수 있습니다:
DescribeClass(CharacterClass.Mage);
그러면 다음과 같은 출력이 나타납니다:
You are a wise mage, master of arcane arts!
열거형 파싱
때로는 문자열을 열거형 값으로 변환해야 할 수 있습니다. 예를 들어, 플레이어가 선택한 클래스를 타이핑할 때입니다. 다음은 그 방법입니다:
string input = "Archer";
if (Enum.TryParse(input, out CharacterClass playerClass))
{
Console.WriteLine($"You've chosen to be an {playerClass}!");
}
else
{
Console.WriteLine("That's not a valid character class!");
}
이 코드는 문자열 "Archer"를 우리의 CharacterClass
열거형으로 안전하게 변환하려고 시도합니다. 성공하면 다음과 같은 출력이 나타납니다:
You've chosen to be an Archer!
열거형 메서드
마지막으로 유용한 열거형 메서드 목록을 정리해 보겠습니다:
메서드 | 설명 | 예제 |
---|---|---|
Enum.GetNames() |
지정된 열거형의 상수 이름 배열을 가져옵니다 | string[] names = Enum.GetNames(typeof(CharacterClass)); |
Enum.GetValues() |
지정된 열거형의 상수 값 배열을 반환합니다 | CharacterClass[] values = (CharacterClass[])Enum.GetValues(typeof(CharacterClass)); |
Enum.IsDefined() |
지정된 열거형에 특정 값이 존재하는지를 나타내는 부울 값을 반환합니다 | bool isDefined = Enum.IsDefined(typeof(CharacterClass), "Warrior"); |
Enum.Parse() |
문자열 표현의 이름이나 정수 값을 하나 이상의 열거형 상수로 변환합니다 | CharacterClass parsedEnum = (CharacterClass)Enum.Parse(typeof(CharacterClass), "Mage"); |
Enum.TryParse() |
문자열 표현의 이름이나 정수 값을 하나 이상의 열거형 상수로 변환하며, 변환 성공 여부를 나타냅니다 | bool success = Enum.TryParse("Healer", out CharacterClass result); |
그렇게 해서 우리는 C#의 스킬을 한 단계 업그레이드하여 열거형을 마스터했습니다. 연습이 완벽을 만든다는 것을 기억하세요, 다양한 시나리오에 맞는 열거형을 만들어 보세요. 예를 들어, 주간 일자, 피자 토핑, 아니면 당신의 좋아하는 코딩 언어에 대해 열거형을 만들어 보세요!
계속 코딩하고, 배우고, 가장 중요한 것은 즐기세요! 다음 번까지, 코드가 버그 없이 잘 작동하고 컴파일 시간이 빠르기를 바랍니다!
Credits: Image by storyset