카테고리 없음

C# 열거형 enum 정리

wook101118 2026. 5. 26. 07:29

C#에서 enum은 열거형이라고 부른다.
열거형은 서로 관련 있는 상수들을 하나의 이름으로 묶어서 관리할 때 사용하는 자료형이다.

예를 들어 캐릭터의 상태를 숫자로 관리한다고 해보자.

 
int state = 0;
 

이 코드만 보면 0이 어떤 상태를 의미하는지 바로 알기 어렵다.

하지만 enum을 사용하면 상태를 이름으로 표현할 수 있다.

 
enum PlayerState
{
    Idle,
    Move,
    Attack,
    Die
}
 

이제 상태를 이렇게 사용할 수 있다.

 
PlayerState state = PlayerState.Idle;
 

Idle이라는 이름을 보고 현재 상태가 대기 상태라는 것을 쉽게 알 수 있다.


1. 열거형이란?

열거형은 정해진 값들 중 하나를 선택해서 사용할 수 있는 자료형이다.

예를 들어 방향을 표현할 때는 다음과 같이 만들 수 있다.

 
enum Direction
{
    Up,
    Down,
    Left,
    Right
}
 

이제 방향을 문자열이나 숫자로 직접 쓰지 않고 enum으로 표현할 수 있다.

 
Direction dir = Direction.Up;
 

즉, enum은 여러 선택지를 하나로 묶어두고 그중 하나를 골라 사용하는 방식이다.


2. enum을 사용하는 이유

1) 코드의 의미가 명확해진다

숫자로 상태를 표현하면 의미를 알기 어렵다.

 
int state = 2;
 

이 코드만 보면 2가 이동 상태인지 공격 상태인지 알기 어렵다.

하지만 enum을 사용하면 의미가 분명해진다.

 
PlayerState state = PlayerState.Attack;
 

이렇게 작성하면 현재 상태가 공격 상태라는 것을 바로 알 수 있다.


2) 실수를 줄일 수 있다

문자열로 상태를 관리하면 오타가 날 수 있다.

 
string state = "Attak";
 

Attack을 써야 하는데 Attak이라고 잘못 입력할 수 있다.

하지만 enum은 미리 정해둔 값만 사용할 수 있기 때문에 이런 실수를 줄일 수 있다.

 
PlayerState state = PlayerState.Attack;
 

3) 관련 있는 값을 한곳에 모을 수 있다

아이템 등급, 몬스터 상태, 게임 상태처럼 관련 있는 값들을 하나로 묶을 수 있다.

 
enum ItemGrade
{
    Common,
    Rare,
    Epic,
    Legendary
}
 

이렇게 하면 아이템 등급을 따로따로 관리하지 않고 하나의 enum으로 관리할 수 있다.


3. enum의 기본 문법

enum은 다음과 같이 선언한다.

 
enum 열거형이름
{
    값1,
    값2,
    값3
}
 

예시는 다음과 같다.

 
enum GameState
{
    Title,
    Playing,
    Pause,
    GameOver
}
 

사용할 때는 enum 이름과 값을 함께 적는다.

 
GameState state = GameState.Playing;
 

4. enum의 내부 값

enum은 겉으로는 이름처럼 보이지만, 내부적으로는 숫자 값을 가진다.

기본적으로 첫 번째 값은 0부터 시작한다.

 
enum PlayerState
{
    Idle,   // 0
    Move,   // 1
    Attack, // 2
    Die     // 3
}
 

따라서 Attack은 내부적으로 숫자 2에 해당한다.

 
int value = (int)PlayerState.Attack;
Console.WriteLine(value);
 

출력 결과는 다음과 같다.

 
2
 

5. enum 값 직접 지정하기

enum의 숫자 값을 직접 지정할 수도 있다.

 
enum ItemGrade
{
    Common = 1,
    Rare = 2,
    Epic = 3,
    Legendary = 4
}
 

이 경우 Common은 1, Rare는 2, Epic은 3, Legendary는 4가 된다.

중간 값만 지정하면 그 뒤의 값은 자동으로 1씩 증가한다.

 
enum MonsterType
{
    Slime = 10,
    Goblin,   // 11
    Orc,      // 12
    Dragon    // 13
}
 

6. enum과 switch문

enum은 switch문과 함께 자주 사용된다.

 
enum PlayerState
{
    Idle,
    Move,
    Attack,
    Die
}
 
 
PlayerState state = PlayerState.Attack;

switch (state)
{
    case PlayerState.Idle:
        Console.WriteLine("대기 상태");
        break;

    case PlayerState.Move:
        Console.WriteLine("이동 상태");
        break;

    case PlayerState.Attack:
        Console.WriteLine("공격 상태");
        break;

    case PlayerState.Die:
        Console.WriteLine("사망 상태");
        break;
}
 

상태에 따라 다른 동작을 실행해야 할 때 enum과 switch문을 같이 사용하면 코드가 깔끔해진다.


7. Unity에서 enum 사용하기

Unity에서도 enum은 자주 사용된다.

예를 들어 적의 상태를 enum으로 만들 수 있다.

 
public enum EnemyState
{
    Idle,
    Patrol,
    Chase,
    Attack,
    Dead
}
 

그리고 스크립트에서 사용할 수 있다.

 
using UnityEngine;

public class Enemy : MonoBehaviour
{
    public EnemyState state;

    private void Update()
    {
        switch (state)
        {
            case EnemyState.Idle:
                Debug.Log("대기 상태");
                break;

            case EnemyState.Patrol:
                Debug.Log("순찰 상태");
                break;

            case EnemyState.Chase:
                Debug.Log("추격 상태");
                break;

            case EnemyState.Attack:
                Debug.Log("공격 상태");
                break;

            case EnemyState.Dead:
                Debug.Log("사망 상태");
                break;
        }
    }
}
 

public으로 선언한 enum 변수는 Unity Inspector에서 드롭다운으로 선택할 수 있다.

 
public EnemyState state;
 

이렇게 하면 숫자를 직접 입력하지 않고 상태를 선택할 수 있어서 편리하다.


8. enum과 접근 제한자

enum에도 접근 제한자를 붙일 수 있다.

 
public enum GameState
{
    Title,
    Playing,
    Pause,
    GameOver
}
 

public을 붙이면 다른 스크립트에서도 사용할 수 있다.

클래스 안에 enum을 선언할 수도 있다.

 
public class Player
{
    public enum PlayerState
    {
        Idle,
        Move,
        Attack
    }
}
 

이 경우 사용할 때는 클래스 이름까지 함께 적어야 한다.

 
Player.PlayerState state = Player.PlayerState.Idle;
 

여러 스크립트에서 자주 사용할 enum이라면 클래스 밖에 따로 선언하는 것이 더 편할 수 있다.


9. enum과 문자열 변환

enum 값은 문자열로 변환할 수 있다.

 
PlayerState state = PlayerState.Attack;

string text = state.ToString();

Console.WriteLine(text);
 

출력 결과는 다음과 같다.

 
Attack
 

반대로 문자열을 enum으로 바꿀 수도 있다.

 
PlayerState state = (PlayerState)Enum.Parse(typeof(PlayerState), "Attack");
 

하지만 문자열에 오타가 있으면 오류가 발생할 수 있다.
그래서 더 안전하게 하려면 Enum.TryParse를 사용하는 것이 좋다.

 
PlayerState result;

bool success = Enum.TryParse("Attack", out result);

if (success)
{
    Console.WriteLine(result);
}
else
{
    Console.WriteLine("변환 실패");
}
 

10. enum과 int 변환

enum은 숫자로 변환할 수 있다.

 
int value = (int)PlayerState.Move;
 

반대로 숫자를 enum으로 변환할 수도 있다.

 
PlayerState state = (PlayerState)1;
 

이 경우 1은 Move를 의미한다.

하지만 숫자를 enum으로 변환할 때는 주의해야 한다.

 
PlayerState state = (PlayerState)100;
 

이렇게 enum에 없는 숫자도 강제로 들어갈 수 있다.

따라서 enum은 가능하면 숫자보다 이름으로 사용하는 것이 좋다.


11. enum의 기본 자료형

enum은 기본적으로 int형을 기반으로 한다.

 
enum Test
{
    A,
    B,
    C
}
 

필요하다면 다른 정수형을 사용할 수도 있다.

 
enum SmallType : byte
{
    A,
    B,
    C
}
 

enum의 기반 자료형으로는 byte, short, int, long 같은 정수형을 사용할 수 있다.

하지만 특별한 이유가 없다면 기본값인 int를 그대로 사용하는 경우가 많다.


12. enum을 사용하기 좋은 상황

enum은 정해진 선택지가 있을 때 사용하기 좋다.

예를 들어 플레이어 상태를 표현할 수 있다.

 
enum PlayerState
{
    Idle,
    Move,
    Jump,
    Attack,
    Die
}
 

게임 상태를 표현할 수도 있다.

 
enum GameState
{
    Title,
    Playing,
    Pause,
    GameOver,
    Clear
}
 

아이템 종류를 표현할 수도 있다.

 
enum ItemType
{
    Weapon,
    Armor,
    Potion,
    Key
}
 

몬스터 종류를 표현할 수도 있다.

 
enum MonsterType
{
    Slime,
    Bat,
    Goblin,
    Boss
}
 

이처럼 enum은 상태, 종류, 등급처럼 정해진 값들을 표현할 때 유용하다.


13. enum을 사용하면 좋지 않은 상황

enum은 정해진 선택지를 표현할 때 좋지만, 모든 상황에 적합한 것은 아니다.

예를 들어 플레이어 이름은 enum으로 만들기 좋지 않다.

 
enum PlayerName
{
    Minsoo,
    Jisoo,
    Chulsu
}
 

플레이어 이름은 사람마다 다르고 계속 바뀔 수 있기 때문에 string으로 관리하는 것이 더 적합하다.

 
string playerName = "Player";
 

또한 아이템의 이름, 가격, 설명, 이미지처럼 여러 정보를 저장해야 하는 경우 enum만으로는 부족하다.

 
enum ItemType
{
    Potion,
    Sword
}
 

이 코드는 아이템의 종류만 구분할 수 있다.
아이템의 가격이나 설명까지 관리하려면 클래스나 ScriptableObject를 함께 사용하는 것이 좋다.


14. enum과 클래스의 차이

enum은 종류를 구분할 때 사용한다.

 
enum WeaponType
{
    Sword,
    Bow,
    Staff
}
 

클래스는 여러 정보를 가진 객체를 만들 때 사용한다.

 
class Weapon
{
    public string name;
    public int damage;
    public int price;
}
 

즉, enum은 선택지 구분용이고, 클래스는 정보 저장용에 가깝다.

둘을 함께 사용할 수도 있다.

 
enum ItemType
{
    Weapon,
    Armor,
    Potion
}
 
 
class Item
{
    public string name;
    public ItemType type;
    public int price;
}
 

이렇게 하면 아이템의 종류는 enum으로 구분하고, 이름이나 가격 같은 정보는 클래스로 관리할 수 있다.


15. enum 이름 짓는 법

enum 이름은 보통 대문자로 시작하는 파스칼 케이스를 사용한다.

 
enum PlayerState
{
    Idle,
    Move,
    Attack
}
 

enum 값의 이름도 대문자로 시작한다.

 
PlayerState.Idle
PlayerState.Move
PlayerState.Attack
 

또한 enum 이름은 보통 단수형으로 작성한다.

 
enum ItemType
{
    Weapon,
    Armor,
    Potion
}
 

ItemTypes보다는 ItemType처럼 쓰는 것이 자연스럽다.


16. enum의 장점

enum의 장점은 다음과 같다.

  1. 코드의 의미가 명확해진다.
  2. 숫자나 문자열을 직접 쓰는 것보다 실수가 줄어든다.
  3. 관련 있는 값을 하나로 묶을 수 있다.
  4. switch문과 함께 사용하기 좋다.
  5. Unity Inspector에서 드롭다운으로 선택할 수 있다.
  6. 상태, 종류, 등급을 관리하기 좋다.

17. enum의 단점과 주의점

enum 값이 너무 많아지면 오히려 관리하기 어려워질 수 있다.

 
enum ItemType
{
    Sword,
    Axe,
    Bow,
    Staff,
    Potion,
    Key,
    Map,
    Coin,
    Gem,
    Book
}
 

값이 많아지고 각각의 데이터가 필요하다면 enum보다는 클래스나 ScriptableObject를 사용하는 것이 더 좋을 수 있다.

또한 enum은 단순히 값을 구분하는 역할만 한다.
자세한 정보를 저장하는 용도로는 적합하지 않다.


18. 실전 예제

아이템 등급에 따라 가격을 다르게 반환하는 코드를 작성해보자.

 
enum ItemGrade
{
    Common,
    Rare,
    Epic,
    Legendary
}
 
 
int GetPrice(ItemGrade grade)
{
    switch (grade)
    {
        case ItemGrade.Common:
            return 100;

        case ItemGrade.Rare:
            return 300;

        case ItemGrade.Epic:
            return 700;

        case ItemGrade.Legendary:
            return 1500;

        default:
            return 0;
    }
}
 

사용 예시는 다음과 같다.

 
ItemGrade grade = ItemGrade.Epic;

int price = GetPrice(grade);

Console.WriteLine(price);
 

출력 결과는 다음과 같다.

 
700
 

이처럼 enum을 사용하면 등급별 처리를 깔끔하게 작성할 수 있다.


19. 정리

열거형 enum은 관련 있는 상수들을 이름으로 묶어서 관리하는 자료형이다.

숫자나 문자열로 상태를 표현하는 것보다 enum을 사용하면 코드의 의미가 더 명확해진다.

특히 게임 개발에서는 캐릭터 상태, 적 상태, 아이템 종류, 게임 상태, 등급 등을 표현할 때 자주 사용된다.

다만 enum은 단순히 종류나 상태를 구분하는 용도에 적합하다.
이름, 가격, 설명, 이미지처럼 여러 데이터를 함께 관리해야 한다면 클래스나 ScriptableObject를 함께 사용하는 것이 좋다.

결론적으로 enum은 정해진 선택지 중 하나를 표현할 때 사용하는 자료형이라고 정리할 수 있다.