enum 문

열거형 데이터 형식의 이름과 및 열거형의 멤버 이름을 선언합니다.

[modifiers] enum enumName [ : typeAnnotation]{
   enumValue1 [ = initializer1]
   [,enumValue2 [ = initializer2]
   [, ... [,enumValueN [ = initializerN ] ]]]
}

인수

  • modifiers
    선택적 요소로서, 열거형의 표시 유형 및 동작을 제어하는 한정자입니다.

  • enumName
    필수적 요소로서, 열거 형식의 이름입니다.

  • typeAnnotation
    선택적 요소로서, 열거형의 내부 데이터 형식입니다. 정수 계열 데이터 형식이어야 합니다. 기본값은 int입니다.

  • enumValue1, enumValue2, ..., enumValueN
    선택적 요소로서, 열거 형식 멤버입니다.

  • initializer1, initializer2, ..., initializerN
    선택적 요소로서, 열거형 멤버의 기본 숫자 값을 재정의하는 상수 식입니다.

설명

enum 선언을 사용하면 프로그램에서 새 열거형 데이터 형식을 사용할 수 있습니다. enum 선언은 클래스 선언이 나타날 수 있는 컨텍스트, 즉 전역 범위, 패키지 범위 또는 클래스 범위에서만 나타날 수 있으며 함수 또는 메서드 내부에서는 나타날 수 없습니다.

열거형의 내부 형식을 어떠한 정수 계열의 데이터 형식(int, short, long, byte, uint, ushort, ulong 또는 sbyte)으로도 선언할 수 있습니다. 열거형 멤버는 암시적으로 내부 데이터 형식으로 또는 내부 데이터 형식에서 강제 변환되므로 enum으로 형식화된 변수에 숫자 데이터의 직접 할당할 수 있습니다. 기본적으로 열거형의 내부 데이터 형식은 int입니다.

각 열거 형식 멤버는 이름 및 선택적 이니셜라이저를 갖습니다. 이니셜라이저는 지정된 열거형과 같은 형식을 가지거나 해당 형식으로 변환될 수 있는 컴파일 타임 상수 식이어야 합니다. 첫 번째 열거 형식 멤버의 값은 0이거나 이니셜라이저의 값이 됩니다. 다음 열거 형식 멤버의 값은 이전 멤버의 값이나 아니셜라이저의 값보다 1이 더 큽니다.

enum 값에는 정적 클래스 멤버에 액세스하는 것과 같은 방식으로 액세스합니다. 멤버의 이름은 Color.Red와 같이 열거형의 이름으로 한정되어야 합니다. enum 형식의 변수에 값을 할당할 때는 정규화된 이름(예: Color.Red), 문자열로 나타낸 이름(예: "Red") 또는 숫자 값 중 하나를 사용할 수 있습니다.

컴파일 타임에 인식되는 문자열에 enum을 할당하면 컴파일러는 필요한 변환을 수행합니다. 예를 들어, "Red"는 Color.Red로 바뀝니다. 컴파일 타임에 해당 문자열이 인식되지 않으면 변환은 런타임에 수행됩니다. 문자열이 열거 형식의 올바른 멤버가 아니면 변환이 실패할 수 있습니다. 변환에 다소 시간이 걸리고 런타임 오류가 발생할 수 있으므로 변수 문자열에는 enum을 할당하지 않도록 합니다.

선언된 값의 범위를 벗어나는 값이 열거 형식의 변수에 포함될 수 있습니다. 이 기능을 사용하는 한 가지 방법은 아래 예제와 같이 멤버의 조합을 비트 플래그로 사용하는 것입니다. enum 변수를 문자열로 변환하면 멤버 이름의 문자열이 표시됩니다.

예제 1

다음 예제에서는 열거형의 동작을 보여 줍니다. 또한 Honda, Toyota 및 Nissan 멤버를 포함하는 CarType이라는 단순 열거형을 선언합니다.

enum CarType {
   Honda,    // Value of zero, since it is first.
   Toyota,   // Value of 1, the successor of zero.
   Nissan    // Value of 2.
}

// Declare a variable of type CarType, and give it the value Honda.
var myCar : CarType = CarType.Honda;
print(int(myCar) + ": " + myCar);

myCar = "Nissan"; // Change the value to "Nissan".
print(int(myCar) + ": " + myCar);

myCar = 1; // 1 is the value of the Toyota member.
print(int(myCar) + ": " + myCar);

이 코드는 다음과 같이 출력됩니다.

0: Honda
2: Nissan
1: Toyota

예제 2

다음 예제에서는 열거를 사용하여 비트 플래그를 보유하는 방법을 보여 주며 enum 변수가 멤버 목록에 명시적으로 지정되지 않은 값을 보유할 수 있어야 함을 나타냅니다. 또한 Format 함수의 동작을 수정하는 데 사용되는 FormatFlags 열거형을 정의합니다.

// Explicitly set the type to byte, as there are only a few flags.
enum FormatFlags : byte {
   // Can't use the default values, since we need explicit bits
   ToUpperCase = 1,   // Should not combine ToUpper and ToLower.
   ToLowerCase = 2,
   TrimLeft    = 4,   // Trim leading spaces.
   TrimRight   = 8,   // Trim trailing spaces.
   UriEncode   = 16   // Encode string as a URI.
}

function Format(s : String, flags : FormatFlags) : String {
   var ret : String = s;
   if(flags & FormatFlags.ToUpperCase) ret = ret.toUpperCase();
   if(flags & FormatFlags.ToLowerCase) ret = ret.toLowerCase();
   if(flags & FormatFlags.TrimLeft)    ret = ret.replace(/^\s+/g, "");
   if(flags & FormatFlags.TrimRight)   ret = ret.replace(/\s+$/g, "");
   if(flags & FormatFlags.UriEncode)   ret = encodeURI(ret);
   return ret;
}

// Combine two enumeration values and store in a FormatFlags variable.
var trim : FormatFlags = FormatFlags.TrimLeft | FormatFlags.TrimRight;
// Combine two enumeration values and store in a byte variable.
var lowerURI : byte = FormatFlags.UriEncode | FormatFlags.ToLowerCase;

var str : String = "  hello, WORLD  ";

print(trim + ": " + Format(str, trim));
print(FormatFlags.ToUpperCase + ": " + Format(str, FormatFlags.ToUpperCase));
print(lowerURI + ": " + Format(str, lowerURI));

이 코드는 다음과 같이 출력됩니다.

12: hello, WORLD
ToUpperCase:   HELLO, WORLD  
18: %20%20hello,%20world%20%20

요구 사항

.NET 버전

참고 항목

개념

형식 변환

형식 주석

기타 리소스

한정자