enum(C# 참조)

업데이트: 2010년 12월

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

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

기본적으로 첫 번째 열거자 값은 0이며 그 이후의 열거자 값은 순서대로 1씩 증가됩니다. 예를 들어, 다음 열거에서 Sat은 0이고 Sun은 1, Mon은 2 등입니다.

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

다음 예제와 같이 열거자는 이니셜라이저를 사용하여 기본값을 재정의할 수 있습니다.

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

이 열거형에서 요소의 순서는 0 대신 1부터 시작합니다. 그러나, 0의 값을 갖는 상수를 포함하는 것이 좋습니다. 자세한 내용은 열거형 형식(C# 프로그래밍 가이드)을 참조하십시오.

모든 열거형에는 char 형식을 제외한 임의의 정수 계열 형식이 될 수 있는 내부 형식이 있습니다. 열거형 요소의 기본적인 내부 형식은 int입니다. 바이트와 같은 다른 정수 형식의 열거형을 선언하려면 다음 예제에서와 같이 콜론을 사용하여 identifier 다음에 형식을 사용합니다.

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 클래스 메서드 및 계산기 등의 도구를 사용할 때 이러한 변경 사항을 확인할 수 있습니다. 세 번째 예제를 참조하십시오.

강력한 프로그래밍

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

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

다른 개발자가 사용자의 코드를 사용할 경우 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 특성을 사용하는 방법과 그 결과를 보여 줍니다.

// Add the attribute Flags or FlagsAttribute.
[Flags]
public enum CarOptions
{
    // The flag for SunRoof is 0001.
    SunRoof = 0x01,
    // The flag for Spoiler is 0010.
    Spoiler = 0x02,
    // The flag for FogLights is 0100.
    FogLights = 0x04,
    // The flag for TintedWindows is 1000.
    TintedWindows = 0x08,
}

class FlagTest
{
    static void Main()
    {
        // The bitwise OR of 0001 and 0100 is 0101.
        CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;

        // Because the Flags attribute is specified, Console.WriteLine displays
        // the name of each enum element that corresponds to a flag that has
        // the value 1 in variable options.
        Console.WriteLine(options);
        // The integer value of 0101 is 5.
        Console.WriteLine((int)options);
    }
}
/* Output:
   SunRoof, FogLights
   5
*/

주석

Flags를 제거하면 예에 다음 값이 표시됩니다.

5

5

C# 언어 사양

자세한 내용은 C# 언어 사양을 참조하십시오. 이 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.

참고 항목

참조

C# 키워드

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

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

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

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

개념

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

열거형 디자인

기타 리소스

C# 참조

변경 기록

날짜

변경 내용

이유

2010년 12월

마지막 예제에 설명을 추가했습니다.

고객 의견