enum은 서로 관련된 상수들을 하나의 이름 아래 묶어주는 자료형이다.
기본적으로 int 값과 연결되어 있어 내부적으로는 숫자로 처리된다.
코드 가독성과 의도를 명확히 전달할 때 유용하다.
enum GameState
{
MainMenu,
Playing,
Paused,
GameOver
}
이렇게 하면 GameState.Playing처럼 의미 있는 이름으로 상태를 관리할 수 있다.
| 특징 | 설명 |
|---|---|
| 기본형 | 내부적으로 int 타입 (0부터 시작) |
| 커스텀 값 | 명시적으로 숫자 지정 가능 |
| 암시적 형변환 금지 | int ↔ enum 간 자동 변환 불가 |
| 타입 안전성 | 열거형 외의 값은 할당 불가 |
public enum Direction
{
Up = 1,
Down = 3,
Left = 5,
Right = 7
}
1. Enum.GetValues()
모든 열거형 값을 배열로 가져오기
foreach (Direction dir in Enum.GetValues(typeof(Direction)))
{
Debug.Log(dir);
}
2. Enum.GetNames()
열거형 값들의 이름(string)을 가져오기
string[] names = Enum.GetNames(typeof(Direction));
3. Enum.IsDefined()
특정 값이 enum에 정의되어 있는지 확인
bool isValid = Enum.IsDefined(typeof(Direction), 3); // true
4. Enum.Parse()
문자열을 enum 값으로 변환
Direction dir = (Direction)Enum.Parse(typeof(Direction), "Left");
5. Enum.TryParse()
예외 없이 안전하게 문자열 → enum 변환
if (Enum.TryParse("Up", out Direction dir))
{
Debug.Log($"Parsed: {dir}");
}
[Flags] 속성을 사용하면 복수 선택이 가능한 비트 연산용 enum을 만들 수 있다.
[System.Flags]
public enum WeaponType
{
None = 0,
Sword = 1,
Bow = 2,
Magic = 4,
Axe = 8
}
WeaponType equipped = WeType.Sword | WeaponType.Bow;
bool hasSword = (equipped & WeaponType.Sword) != 0; // true
switch 문과 함께 enum 사용 시, 새 항목 추가 시 컴파일 경고로 알 수 있음
UI 드롭다운에 enum 값을 나열할 때도 매우 유용
ScriptableObject 등과 함께 StatType, ItemRarity, EnemyState 등으로 자주 사용됨
publi enum StatType
{
HP,
Attack,
Defense
}
public class StatModifier
{
public StatType type;
public int value;
}
이렇게 하면 각 스탯에 어떤 타입의 효과를 주는지 명확히 구분할 수 있다.