enum(C# 참조)enum (C# Reference)

enum 키워드는 열거자 목록이라고 하는 명명된 상수 집합으로 구성된 고유 형식인 열거형을 선언하는 데 사용됩니다.The enum keyword is used to declare an enumeration, a distinct type that consists of a set of named constants called the enumerator list.

대개 네임스페이스의 모든 클래스가 같은 수준으로 열거형에 액세스할 수 있도록 네임스페이스 내에서 직접 열거형을 정의하는 것이 좋습니다.Usually it is best to define an enum directly within a namespace so that all classes in the namespace can access it with equal convenience. 하지만 특정 클래스나 구조체 내에 열거형이 중첩될 수도 있습니다.However, an enum can also be nested within a class or struct.

기본적으로 첫 번째 열거자 값은 0이며 그 이후의 열거자 값은 순서대로 1씩 증가됩니다.By default, the first enumerator has the value 0, and the value of each successive enumerator is increased by 1. 예를 들어 다음 열거형에서 Sat0, Sun1, Mon2등입니다.For example, in the following enumeration, Sat is 0, Sun is 1, Mon is 2, and so forth.

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

다음 예제와 같이 열거자는 이니셜라이저를 사용하여 기본값을 재정의할 수 있습니다.Enumerators can use initializers to override the default values, as shown in the following example.

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

이 열거형에서 요소의 순서는 1 대신 0부터 시작합니다.In this enumeration, the sequence of elements is forced to start from 1 instead of 0. 그러나 값이 0인 상수를 포함하는 것이 좋습니다.However, including a constant that has the value of 0 is recommended. 자세한 내용은 열거형 형식을 참조하세요.For more information, see Enumeration Types.

모든 열거형 형식에는 기본 형식이 있으며, 해당 형식은 char 형식을 제외한 임의의 정수 형식이 될 수 있습니다.Every enumeration type has an underlying type, which can be any integral type except char. 열거형 요소의 기본적인 기본 형식은 i int입니다. 바이트와 같은 다른 정수 형식의 열거형을 선언하려면 다음 예제에서와 같이 콜론을 사용하여 identifier 다음에 형식을 사용합니다.The default underlying type of enumeration elements is int. To declare an enum of another integral type, such as byte, use a colon after the identifier followed by the type, as shown in the following example.

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

열거형으로 승인된 형식은 byte, sbyte, short, ushort, int, uint, long 또는 ulong입니다.The approved types for an enum are byte, sbyte, short, ushort, int, uint, long, or ulong.

열거형 형식의 변수에는 명명된 상수뿐 아니라 기본 형식의 범위에 있는 모든 값을 할당할 수 있습니다.A variable of an enumeration type can be assigned any value in the range of the underlying type; the values are not limited to the named constants.

enum E 의 기본값은 식 (E)0으로 계산된 값입니다.The default value of an enum E is the value produced by the expression (E)0.

참고

열거자의 이름에는 공백이 포함될 수 없습니다.An enumerator cannot contain white space in its name.

기본 형식은 각 열거자에 할당될 저장소 크기를 지정합니다.The underlying type specifies how much storage is allocated for each enumerator. 그러나 enum 형식에서 정수 계열 형식으로 변환하려면 명시적 캐스트가 필요합니다.However, an explicit cast is necessary to convert from enum type to an integral type. 예를 들어 다음 문은 Sun로 변환하는 캐스트를 사용하여 열거자enum int int형식 변수에 대입합니다.For example, the following statement assigns the enumerator Sun to a variable of the type int by using a cast to convert from enum to int.

int x = (int)Day.Sun;

일부 요소가 비트 System.FlagsAttribute 연산으로 결합될 수 있는 열거형에 OR 를 적용하면 일부 도구에서 이 열거형을 사용할 때 해당 특성이 enum 의 동작에 영향을 줍니다.When you apply System.FlagsAttribute to an enumeration that contains elements that can be combined with a bitwise OR operation, the attribute affects the behavior of the enum when it is used with some tools. Console 클래스 메서드 및 식 계산기 등의 도구를 사용할 때 이러한 변경 사항을 확인할 수 있습니다.You can notice these changes when you use tools such as the Console class methods and the Expression Evaluator. 세 번째 예제를 참조하세요.(See the third example.)

강력한 프로그래밍Robust programming

다른 상수와 마찬가지로, 컴파일 시간에 열거형의 개별 값에 대한 모든 참조는 숫자 리터럴로 변환됩니다.Just as with any constant, all references to the individual values of an enum are converted to numeric literals at compile time. 따라서 상수에서 설명하는 버전 문제가 발생할 가능성이 있습니다.This can create potential versioning issues as described in Constants.

새 버전의 열거형에 값을 추가로 할당하거나 새 버전의 열거형 멤버 값을 변경하면 종속된 소스 코드에 문제가 발생할 수 있습니다.Assigning additional values to new versions of enums, or changing the values of the enum members in a new version, can cause problems for dependent source code. switch 문에서 열거형 값이 사용되는 경우가 많습니다.Enum values often are used in switch statements. enum 형식에 요소가 추가되었으면 switch 문의 기본 섹션을 예기치 않게 선택할 수 있습니다.If additional elements have been added to the enum type, the default section of the switch statement can be selected unexpectedly.

다른 개발자가 코드를 사용할 경우 enum 형식에 새 요소가 추가된다면 해당 코드에서 이를 적절히 처리할 수 있도록 지침을 제공해야 합니다.If other developers use your code, you should provide guidelines about how their code should react if new elements are added to any enum types.

Example

다음 예제에서는 열거형 Day를 선언합니다.In the following example, an enumeration, Day, is declared. 두 개의 열거자를 명시적으로 정수로 변환하여 정수 변수에 대입합니다.Two enumerators are explicitly converted to integer and assigned to integer variables.


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

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

Example

다음 예제에서는 base-type 옵션을 사용하여 멤버가 enum 형식인 long을 선언합니다.In the following example, the base-type option is used to declare an enum whose members are of type long. 열거형의 기본 형식이 long인 경우에도 캐스트를 사용하여 열거형 멤버를 long 형식으로 명시적으로 변환해야 합니다.Notice that even though the underlying type of the enumeration is long, the enumeration members still must be explicitly converted to type long by using a cast.

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
*/

Example

다음 코드 예제에서는 System.FlagsAttribute 선언에 enum 특성을 사용하는 방법과 그 결과를 보여 줍니다.The following code example illustrates the use and effect of the System.FlagsAttribute attribute on an enum declaration.

// 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
*/

설명Comments

Flags를 제거하면 예에 다음 값이 표시됩니다.If you remove Flags, the example displays the following values:

5

5

C# 언어 사양C# language specification

자세한 내용은 C# 언어 사양을 참조하세요.For more information, see the C# Language Specification. C# 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.The language specification is the definitive source for C# syntax and usage.

참고 항목See also