[예제로 배우는 C# 프로그래밍] 열거형 enum
C# 열거형 enum
enum (열거형)
C#의 키워드 enum은 열거형 상수(constant)를 표현하기 위한 것으로, 이를 이용하면 상수 숫자들을 보다 의미있는 단어들로 표현할 수 있어 프로그램을 읽기 쉽게 해준다.
enum의 각 요소는 별도로 지정하지 않으면 첫번째 요소가 0, 두번재 요소가 1.... 처럼 1씩 증가된 값들을 할당 받는다.
enum문은 클래스 안이나 네임스페이스 내에서만 선언될 수 있다. (메스드 안이나 속성 안에서는 선언되지 않는다.)
다음 예제는 Category라는 enum 타입을 정의한 예이다. Cake는 0, IceCream은 1, Bread는 2 값을 갖는다.
public enum Category
{
Cake,
IceCream,
Bread
}
enum의 사용
enum 타입은 숫자형 타입과 호환이 가능하다. enum 타입의 변수를 int로 캐스팅하면 해당 enum 값의 숫자 값을 얻게 된다. 또한 enum 타입의 변수는 enum 리터럴 값과 서로 비교할 수 있다.
다음 예제는 enum 변수 myCity가 리터럴 City.Seoul과 같은지 체크하는 코드이다.
class Program
{
enum City
{
Seoul, // 0
Daejun, // 1
Busan = 5, // 5
Jeju = 10 // 10
}
static void Main(string[] args)
{
City myCity;
// enum 타입에 값을 대입하는 방법
myCity = City.Seoul;
// enum을 int로 변환(Casting)하는 방법.
// (int)를 앞에 지정.
int cityValue = (int) myCity;
if (myCity == City.Seoul) // enum 값을 비교하는 방법
{
Console.WriteLine("Welcome to Seoul");
}
}
}
플래그(flag) enum
enum의 각 멤버들은 각 비트별로 구분되는 값들(ex. 1, 2, 4,8, ...)을 가질 수 있는데, 이렇게 enum 타입이 비트 필드를 갖는다는 것을 표시하기 위해 enum 선언문 바로 위에 [Flags]라는 Attribute를 지정할 수 있다.
[Flags] 특성을 갖는 플래그 enum은 OR 연산자를 이용해서 한 enum 변수에 다중값(ex. 1+4)을 가질 수 있으며, AND 연산자를 이용하여 enum 변수가 특정 멤버를 포함하고 있는지 체크할 수 있다.
다음 예제는 Border라는 플래그 enum으로 OR 연산을 통해 다중값을 표현하고, AND 연산을 통해 특정 멤버를 체크해보는 코드이다. 또한, 플래그 enum에 대해 .ToString() 메서드를 사용하면 해당 플래그 멤버명들을 문자열로 보여준다는 것이다. [Flags]가 없으면 1+4, 즉 5를 출력한다.
[Flags]
enum Border
{
None = 0,
Top = 1,
Right = 2,
Bottom = 4,
Left = 8
}
static void Main(string[] args)
{
// OR 연산자로 다중 플래그 할당
Border b = Border.Top | Border.Bottom;
// & 연산자로 플래그 체크
if ((b & Border.Top) != 0)
{
//HasFlag()이용 플래그 체크
if (b.HasFlag(Border.Bottom))
{
// "Top, Bottom" 출력
Console.WriteLine(b.ToString());
}
}
}