반응형
1. Enum 이란?
enum열거형(enumeration)의 약자로, 관련된 상수들을 묶어 하나의 타입으로 정의할 수 있는 기능입니다. 열거형은 기본적으로 정수 값과 매핑되며, 이 값을 의미 있는 이름으로 사용할 수 있습니다. enum 을 사용하면 코드의 가독성을 높이고, 특정 값 집합을 제한적으로 사용하도록 강제할 수 있습니다. 
// 열거형 정의
enum DaysOfWeek
{
    Sunday,     // 0
    Monday,     // 1
    Tuesday,    // 2
    Wednesday,  // 3
    Thursday,   // 4
    Friday,     // 5
    Saturday    // 6
}

// 열거형 사용
DaysOfWeek today = DaysOfWeek.Wednesday;

Console.WriteLine(today);          // 출력: Wednesday
Console.WriteLine((int)today);     // 출력: 3​

 

2. Enum 특징
- 명확한 코드 : 숫자 값 대신 의미 있는 이름을 사용할 수 있어, 코드의 가독성이 높아집니다.
- 기본 타입 : 열거형은 기본적으로 int형으로 저장되지만, 다른 정수형 타입도 사용할 수 있습니다.
- 값 지정 : 열거형 요소의 값은 기본적으로 0부터 시작하지만, 원하는 값으로 지정할 수도 있습니다.
enum Severity
{
    Low = 1,
    Medium = 2,
    High = 3,
    Critical = 4
}​

 

3. Flag Enum
Flag enum비트 연산을 통해 여러 값을 결합하여 사용할 수 있는 특수한 열거형입니다. 주로 상태 플래그를 나타내거나, 조합 가능한 옵션을 표현할 때 사용됩니다. 이를 통해 하나의 변수로 여러 상태를 관리할 수 있습니다. Flag enum은 [Flags] 특성을 사용하여 정의하며, 각 요소는 2의 제곱수로 값을 설정하여 비트 단위로 결합할 수 있습니다.
[Flags]
enum Weapon
{
    None    = 0,
    Sword   = 1 << 0,   // 1
    Bow     = 1 << 1,   // 2
    Dagger  = 1 << 2,   // 4
    Shield  = 1 << 3    // 8
}​

 


ex) 게임에서 무기 교체 시
class Player
{
    public Weapon CurrentWeapons { get; set; } = Weapon.None;

    public void EquipWeapon(Weapon weapon)
    {
        CurrentWeapons |= weapon; // 무기 장착 (OR 연산)
    }

    public void UnequipWeapon(Weapon weapon)
    {
        CurrentWeapons &= ~weapon; // 무기 해제 (AND와 NOT 연산)
    }

    public void ShowCurrentWeapons()
    {
        Console.WriteLine($"Current Weapons: {CurrentWeapons}");
    }
}

// 사용 예시
Player player = new Player();

// 플레이어가 칼과 방패를 장착
player.EquipWeapon(Weapon.Sword);
player.EquipWeapon(Weapon.Shield);
player.ShowCurrentWeapons(); // 출력: Sword, Shield

// 플레이어가 칼을 해제
player.UnequipWeapon(Weapon.Sword);
player.ShowCurrentWeapons(); // 출력: Shield​​

- OR 연산자를 사용하여 Sword와 Shield를 장착.
- AND 연산자~(NOT) 연산자를 조합하여 Sword를 해제.

[부가설명]
- AND (&) 연산자두 값의 비트를 비교해 두 비트가 모두 1일 때만 1이 되는 결과를 만듭니다. 특정 플래그가 설정되어 있는지 확인할 때 유용합니다.
- OR (|) 연산자두 값의 비트를 비교해 하나라도 1이면 1이 되는 결과를 만듭니다. 새로운 플래그를 추가하거나 결합할 때 사용됩니다.

 

 

[정리하며]

C#에서 enum코드의 가독성유지보수성을 높이는 강력한 도구입니다. 일반 enum은 명확한 값의 집합을 나타낼 때 유용하고, Flag enum비트 연산을 통해 다중 상태를 관리할 때 특히 유용합니다. 게임에서 무기 시스템을 관리하는 예시처럼, Flag enum을 사용하면 복잡한 상태를 간결하게 처리할 수 있습니다.

반응형

+ Recent posts