열거형 (enum)

강성현
∙∙조회 4
열거형 (enum)

1. 열거형이란?

정해진 몇 가지 값에 이름을 붙여 하나의 자료형으로 만드는 문법 입니다.

 

  • 문법형식

public enum <열거형 이름>

{

<멤버>,

<멤버>, ...

}

csharp
public enum CharacterState
{
    Idle,
    Walking,
    Running,
    Dead
}
public static void Main()
{
    CharacterState state = CharacterState.Idle;

    state = CharacterState.Dead;
}

 

csharp
public enum CharacterState  
{  
    Idle,  
    Move,  
    Attack,  
    Dead  
}

public enum ItemGrade  
{  
    Common,  
    Rare,  
    Epic,  
    Legendary  
}

public class Program  
{  
    public static void Main()  
    {  
        CharacterState state = CharacterState.Idle;  
        Console.WriteLine($"현재 상태: {state}"); // 출력 : Idle

        state = CharacterState.Attack;  
        Console.WriteLine($"변경된 상태: {state}"); // 출력 : Attack

        if (state != CharacterState.Dead)  
        {  
            Console.WriteLine("행동할 수 있습니다.");  // 출력 : 행동할 수 있습니다.
        }

        ItemGrade grade = ItemGrade.Epic;  
        Console.WriteLine($"획득 아이템 등급: {grade}");  // 출력 : 획득 아이템 등급 : Epic
    }  
}

 


1-1)인덱스 값 지정

열거형 멤버는 겉으로는 이름이지만 속으로는 정수값을 하나씩 가지고 있습니다.

값을 적지 않으면 첫 멤버가 0이며, 하나씩 올라가고,

값을 적는다면 해당 번호부터 순서대로 하나씩 올라갑니다.

csharp
public enum CharacterState  
{  
    Idle,       // 0  
    Move,       // 1  
    Attack,     // 2  
    Dead        // 3  
}

-------------------------

public enum CharacterState
{  
    Idle = 5,   // 5  
    Move,       // 6  
    Attack,     // 7  
    Dead        // 8  
}

 

1-2) 열거형 인덱스 번호가 겹친 경우

인덱스가 겹치는 경우에는 해당 인덱스를 출력하였을 때 앞에 있는 멤버가 출력된다.

하지만 이런 경우는 안 만드는 것이 좋다.

csharp
enum PokemonType
{
    Normal = 5,
    Fire,
    Water,
    Grass = 15,
    Electric,
    Ice = 15
}

 

1-3) 열거형을 인덱스로 불러오기

csharp
// 열거형을 인덱스로 불러오는 법
Console.WriteLine((PokemonType)1); // 출력 Fire

// 인덱스를 넘어서는 순간 해당 숫자로 표기한다.
Console.WriteLine((PokemonType)20); // 출력 : 20

 

1-4) 열거형에서 인덱스 찾기

csharp
PokemonType pokemonType = PokemonType.Fire;
int typeNumber = (int)pokemonType;

Console.WriteLine(typeNumber); // 출력 : 1

 

1-5) 기반 형식 지정

public enum <이름> : <정수 형식> { … }

csharp
public enum ItemGrade : byte  
{  
    Common,  
    Rare,  
    Epic,  
    Legendary  
}
기반 형식크기담을 수 있는 멤버 값의 범위
byte1바이트0 ~ 255
short2바이트-32,768 ~ 32,767
int (기본)4바이트약 -21억 ~ 21억
long8바이트약 -922경 ~ 922경

 

※ 지정한 형식의 범위를 벗어나는 값을 멤버에 적으면 컴파일 오류가 납니다.

csharp
public enum ItemGrade : byte  
{  
    Common = 300     // 오류: byte에 담을 수 없는 값입니다  
}