enum(C# 참조)

enum 키워드를 사용하여 열거자 목록이라고 하는 명명된 상수 집합으로 구성된 독특한 형식인 열거형을 선언합니다. 모든 열거형에는 char 형식을 제외한 임의의 정수 계열 형식이 될 수 있는 내부 형식이 있습니다. 열거형 요소의 기본적인 내부 형식은 int입니다. 기본적으로 첫 번째 열거자 값은 0이며 그 이후의 열거자 값은 순서대로 1씩 증가됩니다. 예를 들면 다음과 같습니다.

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

이 열거형에서 Sat0, Sun1, Mon2이고 이와 같은 식으로 계속됩니다. 열거자는 기본값을 재정의하는 이니셜라이저를 가질 수 있습니다. 예를 들면 다음과 같습니다.

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

이 열거형에서 요소의 순서는 0 대신 1부터 시작합니다.

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

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

참고

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

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

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

개념

C# 프로그래밍 가이드
열거형 디자인

기타 리소스

C# 참조