반응형
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을 사용하면 복잡한 상태를 간결하게 처리할 수 있습니다.
반응형
'Programming Languages > C# 기초문법' 카테고리의 다른 글
[C# 기초문법] 조건문 (if, else, else if, switch, 삼항 연산자) (0) | 2024.09.03 |
---|---|
[C# 기초문법] 연산자 (산술, 비교, 논리, 비트, 할당, 조건 연산자) (0) | 2024.09.03 |
[C# 기초문법] 문자열 (string) (0) | 2024.09.02 |
[C# 기초문법] 배열 (Array) (0) | 2024.09.02 |
[C# 기초문법] 변수 및 상수 (0) | 2024.09.02 |