enum(C# 참조)

업데이트: 2007년 11월

enum 키워드를 사용하여 열거자 목록이라고 하는 명명된 상수 집합으로 구성된 고유 형식인 열거형을 선언합니다.

대개 네임스페이스의 모든 클래스가 같은 수준으로 열거형에 액세스할 수 있도록 네임스페이스 내에서 직접 열거형을 정의하는 것이 좋습니다. 하지만 특정 클래스나 구조체 내에 열거형이 중첩될 수도 있습니다.

기본적으로 첫 번째 열거자 값은 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부터 시작합니다. 하지만 열거형은 값이 0인 상수를 포함하는 것이 좋습니다. 자세한 내용은 열거형 형식(C# 프로그래밍 가이드)을 참조하십시오.

모든 열거형에는 char 형식을 제외한 임의의 정수 계열 형식이 될 수 있는 내부 형식이 있습니다. 열거형 요소의 기본적인 내부 형식은 int입니다. byte와 같은 또 다른 정수 계열 형식의 열거형을 선언하려면 식별자 뒤에 콜론을 사용하고 그 뒤에 형식을 표기합니다.

enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

열거형으로 승인된 형식은 byte, sbyte, short, ushort, int, uint, long 또는 ulong입니다.

Days 형식의 변수에는 명명된 상수뿐 아니라 내부 형식의 범위에 있는 모든 값을 할당할 수 있습니다.

enum E의 기본값은 식 (E)0으로 계산된 값입니다.

참고:

열거자의 이름에는 공백이 포함될 수 없습니다.

내부 형식은 각 열거자에 할당될 저장소 크기를 지정합니다. 그러나 enum 형식에서 정수 계열 형식으로 변환하려면 명시적 캐스트가 필요합니다. 예를 들어, 다음 문은 enum을 int로 변환하는 캐스트를 사용하여 열거자 Sun을 int 형식 변수에 대입합니다.

int x = (int)Days.Sun;

일부 요소가 비트 OR 연산으로 결합된 열거형에 System.FlagsAttribute를 적용하면 일부 도구에서 이 열거형을 사용할 때 해당 특성이 enum의 동작에 영향을 줍니다. Console 클래스 메서드, 식 계산기 등의 도구를 사용할 때 이러한 변경 사항을 확인할 수 있습니다. 예제 3을 참조하십시오.

강력한 프로그래밍

다른 상수와 마찬가지로, 컴파일 타임에 열거형의 개별 값에 대한 모든 참조는 숫자 리터럴로 변환됩니다. 따라서 상수(C# 프로그래밍 가이드)에서 설명하는 버전 문제가 발생할 가능성이 있습니다.

새 버전의 열거형에 값을 추가로 할당하거나 새 버전의 열거형 멤버 값을 변경하면 종속된 소스 코드에 문제가 발생할 수 있습니다. switch 문에서 열거형 값이 사용되는 경우가 많습니다. enum 형식에 요소가 추가되면 기본값 테스트에서 예기치 않게 true를 반환할 수 있습니다.

다른 개발자가 사용자의 코드를 사용할 경우 enum 형식에 새 요소가 추가된다면 해당 코드에서 이를 적절히 처리할 수 있도록 지침을 제공해야 합니다.

예제

이 예제에서는 열거형 Days를 선언합니다. 두 개의 열거자를 명시적으로 정수로 변환하여 정수 변수에 대입합니다.

public class EnumTest
{
    enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

    static void Main()
    {
        int x = (int)Days.Sun;
        int y = (int)Days.Fri;
        Console.WriteLine("Sun = {0}", x);
        Console.WriteLine("Fri = {0}", y);
    }
}
/* Output:
   Sun = 0
   Fri = 5
*/

이 예제에서는 base-type 옵션을 사용하여 멤버가 long 형식인 enum을 선언합니다. 열거형의 내부 형식이 long인 경우에도 캐스트를 사용하여 열거형 멤버를 long 형식으로 명시적으로 변환해야 합니다.

public class EnumTest2
{
    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);
    }
}
/* Output:
   Max = 2147483648
   Min = 255
*/

다음 코드 예제에서는 enum 선언에 System.FlagsAttribute 특성을 사용하는 방법과 그 결과를 보여 줍니다.

[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);
    }
}
/* Output:
   SunRoof, FogLights
   5
*/

설명

앞의 예제에서 FlagsAttribute를 제거하면 다음과 같이 출력됩니다.

5

5

C# 언어 사양

자세한 내용은 C# 언어 사양의 다음 단원을 참조하십시오.

  • 1.10 열거형

  • 6.2.2 명시적 열거형 변환

  • 14 열거형

참고 항목

작업

특성 샘플

개념

열거형 형식(C# 프로그래밍 가이드)

열거형 디자인

참조

C# 키워드

정수 계열 형식 표(C# 참조)

기본 제공 형식 표(C# 참조)

암시적 숫자 변환 표(C# 참조)

명시적 숫자 변환 표(C# 참조)

기타 리소스

C# 참조