열거형 (enum)

본문 로딩 중...
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
정해진 몇 가지 값에 이름을 붙여 하나의 자료형으로 만드는 문법 입니다.
public enum <열거형 이름>
{
<멤버>,
<멤버>, ...
}
public enum CharacterState
{
Idle,
Walking,
Running,
Dead
}
public static void Main()
{
CharacterState state = CharacterState.Idle;
state = CharacterState.Dead;
}
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
}
}
열거형 멤버는 겉으로는 이름이지만 속으로는 정수값을 하나씩 가지고 있습니다.
값을 적지 않으면 첫 멤버가 0이며, 하나씩 올라가고,
값을 적는다면 해당 번호부터 순서대로 하나씩 올라갑니다.
public enum CharacterState
{
Idle, // 0
Move, // 1
Attack, // 2
Dead // 3
}
-------------------------
public enum CharacterState
{
Idle = 5, // 5
Move, // 6
Attack, // 7
Dead // 8
}
인덱스가 겹치는 경우에는 해당 인덱스를 출력하였을 때 앞에 있는 멤버가 출력된다.
하지만 이런 경우는 안 만드는 것이 좋다.
enum PokemonType
{
Normal = 5,
Fire,
Water,
Grass = 15,
Electric,
Ice = 15
}
// 열거형을 인덱스로 불러오는 법
Console.WriteLine((PokemonType)1); // 출력 Fire
// 인덱스를 넘어서는 순간 해당 숫자로 표기한다.
Console.WriteLine((PokemonType)20); // 출력 : 20
PokemonType pokemonType = PokemonType.Fire;
int typeNumber = (int)pokemonType;
Console.WriteLine(typeNumber); // 출력 : 1
public enum <이름> : <정수 형식> { … }
public enum ItemGrade : byte
{
Common,
Rare,
Epic,
Legendary
}
| 기반 형식 | 크기 | 담을 수 있는 멤버 값의 범위 |
|---|---|---|
byte | 1바이트 | 0 ~ 255 |
short | 2바이트 | -32,768 ~ 32,767 |
int (기본) | 4바이트 | 약 -21억 ~ 21억 |
long | 8바이트 | 약 -922경 ~ 922경 |
※ 지정한 형식의 범위를 벗어나는 값을 멤버에 적으면 컴파일 오류가 납니다.
public enum ItemGrade : byte
{
Common = 300 // 오류: byte에 담을 수 없는 값입니다
}