열거형(C# 참조)

열거형(또는 열거형 형식)은 기본 정수 숫자 형식의 명명된 상수 집합에 의해 정의되는 값 형식입니다. 열거형을 정의하려면 enum 키워드를 정의하고 열거형 멤버의 이름을 지정합니다.

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

기본적으로 열거형 멤버의 연결된 상수 값은 int 형식입니다. 즉, 0으로 시작하고 정의 텍스트 순서에 따라 1씩 증가합니다. 다른 정수 숫자 형식을 열거형 형식의 기본 형식으로 명시적으로 지정할 수 있습니다. 다음 예제와 같이 연결된 상수 값을 명시적으로 지정할 수도 있습니다.

enum ErrorCode : ushort
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

열거형 형식의 정의 내에서 메서드를 정의할 수 없습니다. 열거형 형식에 기능을 추가하려면 확장 메서드를 만듭니다.

0에 해당 열거형 멤버가 없는 경우에도 열거형 형식 E의 기본값은 식 (E)0에 의해 생성되는 값입니다.

열거형 형식을 사용하여 상호 배타적인 값의 집합에서의 선택 또는 선택의 조합을 나타낼 수 있습니다. 선택의 조합을 나타내려면 열거형 형식을 비트 플래그로 정의합니다.

비트 플래그로서 열거형 형식

열거형 형식으로 선택의 조합을 나타내려면 개별 선택이 비트 필드가 되도록 해당 선택의 열거형 멤버를 정의합니다. 즉, 이러한 멤버의 연결된 값은 제곱이어야 합니다. 그런 다음 비트 논리 연산자 | 또는 &를 사용하여 각각 선택을 조합하거나 선택의 조합을 교차할 수 있습니다. 열거형 형식이 비트 필드를 선언한다고 표시하려면 Flags 특성을 적용합니다. 다음 예제와 같이 열거형 형식의 정의에 몇 가지 일반적인 조합을 포함할 수도 있습니다.

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}

자세한 내용과 예제는 System.FlagsAttribute API 참조 페이지 및 System.Enum API 참조 페이지의 비독점적 멤버 및 Flags 특성 섹션을 참조하세요.

System.Enum 형식 및 열거형 제약 조건

System.Enum 형식은 모든 열거형 형식의 추상적 기본 클래스입니다. 이 형식은 열거형 형식 및 그 값에 대한 정보를 가져오는 여러 메서드를 제공합니다. 자세한 내용과 예제는 System.Enum API 참조 페이지를 참조하세요.

기본 클래스 제약 조건(열거형 제약 조건이라고 함)에서 System.Enum을 사용하여 형식 매개 변수가 열거형 형식이라고 지정할 수 있습니다. 또한 열거형 형식은 형식 매개 변수가 null을 허용하지 않는 값 형식이라고 지정하는 데 사용되는 struct 제약 조건을 충족합니다.

변환

모든 열거형 형식에는 열거형 형식과 기본 정수 형식 간의 명시적 변환이 있습니다. 열거형 값을 기본 형식에 캐스트하는 경우, 그 결과는 열거형 멤버의 연결된 정수 값입니다.

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

public class EnumConversionExample
{
    public static void Main()
    {
        Season a = Season.Autumn;
        Console.WriteLine($"Integral value of {a} is {(int)a}");  // output: Integral value of Autumn is 2

        var b = (Season)1;
        Console.WriteLine(b);  // output: Summer

        var c = (Season)4;
        Console.WriteLine(c);  // output: 4
    }
}

열거형 형식에 연결된 특정 값이 포함되어 있는지 확인하려면 Enum.IsDefined 메서드를 사용합니다.

모든 열거형 형식에는 System.Enum 형식의 boxing 및 unboxing 변환이 있습니다.

C# 언어 사양

자세한 내용은 C# 언어 사양의 다음 섹션을 참조하세요.

참고 항목