enum(C# 참조)
enum 키워드를 사용하여 열거자 목록이라고 하는 명명된 상수 집합으로 구성된 독특한 형식인 열거형을 선언합니다. 모든 열거형에는 char 형식을 제외한 임의의 정수 계열 형식이 될 수 있는 내부 형식이 있습니다. 열거형 요소의 기본적인 내부 형식은 int입니다. 기본적으로 첫 번째 열거자 값은 0이며 그 이후의 열거자 값은 순서대로 1씩 증가됩니다. 예를 들면 다음과 같습니다.
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
이 열거형에서 Sat
는 0
, Sun
은 1
, Mon
은 2
이고 이와 같은 식으로 계속됩니다. 열거자는 기본값을 재정의하는 이니셜라이저를 가질 수 있습니다. 예를 들면 다음과 같습니다.
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
이 열거형에서 요소의 순서는 0
대신 1
부터 시작합니다.
Days
형식의 변수에는 명명된 상수뿐 아니라 내부 형식의 범위에 있는 모든 값을 할당할 수 있습니다.
enum E의 기본값은 식 (E)0
으로 계산된 값입니다.
참고
열거자의 이름에는 공백이 포함될 수 없습니다.
내부 형식은 각 열거자에 할당될 저장소 크기를 지정합니다. 그러나 enum 형식에서 정수 계열 형식으로 변환하려면 명시적 캐스트가 필요합니다. 예를 들어, 다음 문은 enum을 int로 변환하는 캐스트를 사용하여 열거자 Sun
을 int 형식 변수에 대입합니다.
int x = (int)Days.Sun;
일부 요소가 비트 OR 연산으로 결합된 열거형에 System.FlagsAttribute를 적용하면 일부 도구에서 이 열거형을 사용할 때 enum의 동작에 영향이 미칩니다. Console 클래스 메서드, 식 계산기 등의 도구를 사용할 때 이러한 변경을 확인할 수 있습니다. 예제 3을 참조하십시오.
강력한 프로그래밍
새 버전의 열거형에 값을 추가로 할당하거나 새 버전의 열거형 멤버 값을 변경하면 종속된 소스 코드에 문제가 발생할 수 있습니다. 예를 들어, switch 문에 enum 값을 사용한 경우 enum 형식에 요소가 추가되면 기본값 테스트에서 예기치 않게 true가 반환할 수 있습니다.
다른 개발자가 사용자의 코드를 사용할 때는 enum 형식에 새 요소가 추가될 경우 해당 코드에서 이를 적절히 처리할 수 있도록 지침을 제공해야 합니다.
예제
이 예제에서는 열거형 Days
를 선언합니다. 두 개의 열거자를 명시적으로 정수로 변환하여 정수 변수에 대입합니다.
// keyword_enum.cs
// enum initialization:
using System;
public class EnumTest
{
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
static void Main()
{
int x = (int)Days.Sun;
int y = (int)Days.Fri;
Console.WriteLine("Sun = {0}", x);
Console.WriteLine("Fri = {0}", y);
}
}
출력
Sun = 2 Fri = 7
이 예제에서는 base-type 옵션을 사용하여 멤버가 long 형식인 enum을 선언합니다. 열거형의 내부 형식이 long인 경우에도 캐스트를 사용하여 열거형 멤버를 long 형식으로 명시적으로 변환해야 합니다.
// keyword_enum2.cs
// Using long enumerators
using System;
public class EnumTest
{
enum Range :long {Max = 2147483648L, Min = 255L};
static void Main()
{
long x = (long)Range.Max;
long y = (long)Range.Min;
Console.WriteLine("Max = {0}", x);
Console.WriteLine("Min = {0}", y);
}
}
출력
Max = 2147483648 Min = 255
다음 코드 예제에서는 enum 선언에 System.FlagsAttribute 특성을 사용하는 방법과 그 결과를 보여 줍니다.
// enumFlags.cs
// Using the FlagsAttribute on enumerations.
using System;
[Flags]
public enum CarOptions
{
SunRoof = 0x01,
Spoiler = 0x02,
FogLights = 0x04,
TintedWindows = 0x08,
}
class FlagTest
{
static void Main()
{
CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
Console.WriteLine(options);
Console.WriteLine((int)options);
}
}
출력
SunRoof, FogLights 5
설명
Sat=1
의 이니셜라이저를 제거한 경우의 결과는 다음과 같습니다.
Sun = 1
Fri = 6
설명
앞의 예제에서 FlagsAttribute를 제거하면 다음과 같이 출력됩니다.
5
5
C# 언어 사양
자세한 내용은 C# 언어 사양의 다음 단원을 참조하십시오.
1.10 열거형
6.2.2 명시적 열거형 변환
14 열거형
참고 항목
작업
참조
C# 키워드
정수 계열 형식 표(C# 참조)
기본 제공 형식 표(C# 참조)
암시적 숫자 변환 표(C# 참조)
명시적 숫자 변환 표(C# 참조)