enum(C# 참조)

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# 참조