[C#] 열거형(Enumeration, enum)

Lumos Velog·2025년 5월 8일

열거형(enum)이란?

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}");
}



비트 마스크용 enum

[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;
}

이렇게 하면 각 스탯에 어떤 타입의 효과를 주는지 명확히 구분할 수 있다.

0개의 댓글