Enum 문(Visual Basic)

열거형을 선언하고 열거형의 멤버 값을 정의합니다.

구문

[ <attributelist> ] [ accessmodifier ]  [ Shadows ]
Enum enumerationname [ As datatype ]
   memberlist
End Enum

부분

  • attributelist

    선택 사항. 이 열거형에 적용되는 특성 목록입니다. 특성 목록은 꺾쇠괄호("<"및">")로 묶어야 합니다.

    FlagsAttribute 특성은 열거형 인스턴스의 값에 여러 열거형 멤버가 포함될 수 있으며 각 멤버가 열거형 값의 비트 필드를 나타낸다는 것을 나타냅니다.

  • accessmodifier

    선택 사항. 이 열거형에 액세스할 수 있는 코드를 지정합니다. 다음 중 하나일 수 있습니다.

  • Shadows

    선택 사항. 이 열거형은 동일한 이름의 프로그래밍 요소 또는 오버로드된 요소 집합을 기본 클래스에서 다시 선언하고 숨기게 지정합니다. 그림자는 해당 멤버가 아닌 열거형 자체에만 지정할 수 있습니다.

  • enumerationname

    필수입니다. 열거형의 이름입니다. 유효한 이름에 대한 자세한 내용은 선언된 요소 이름을 참조하세요.

  • datatype

    선택 사항. 열거형 및 모든 해당 멤버의 데이터 형식입니다.

  • memberlist

    필수입니다. 이 문에서 선언되는 멤버 상수 목록입니다. 개별 소스 코드 줄에 여러 멤버가 표시됩니다.

    member에는 다음과 같은 구문과 요소가 있습니다. [<attribute list>] member name [ = initializer ]

    요소 설명
    membername 필수입니다. 이 멤버의 이름입니다.
    initializer 선택 사항. 컴파일 시간에 평가되고 이 멤버에 할당되는 식입니다.
  • End Enum

    Enum 블록을 종료합니다.

설명

서로 논리적으로 관련된 일련의 교환되지 않는 값이 있는 경우 열거형에서 함께 정의할 수 있습니다. 열거형 및 해당 멤버에 대한 의미 있는 이름을 제공하므로 값보다 기억하기 쉽습니다. 그런 다음 코드의 여러 위치에서 열거형 멤버를 사용할 수 있습니다.

열거형을 사용할 경우의 이점은 다음과 같습니다.

  • 숫자 변환 또는 잘못 입력으로 인한 오류를 줄입니다.

  • 나중에 값을 쉽게 변경할 수 있습니다.

  • 코드를 더 쉽게 읽을 수 있도록 합니다. 즉, 오류가 발생할 가능성이 적습니다.

  • 이전 버전과의 호환성이 보장됩니다. 열거형을 사용하면 나중에 누군가가 멤버 이름에 해당하는 값을 변경하더라도 코드에서 오류가 발생할 가능성이 줄어듭니다.

열거형에는 이름, 기본 데이터 형식 및 멤버 집합이 있습니다. 각 멤버는 상수입니다.

클래스, 구조체, 모듈 또는 인터페이스 수준에서 프로시저 외부에서 선언된 열거형은 멤버 열거형입니다. 클래스, 구조체, 모듈 또는 선언하는 인터페이스의 멤버입니다.

멤버 열거형은 클래스, 구조체, 모듈 또는 인터페이스 내의 어디에서나 액세스할 수 있습니다. 클래스, 구조 또는 모듈 외부의 코드는 멤버 열거형의 이름을 해당 클래스, 구조체 또는 모듈의 이름으로 한정해야 합니다. Imports 문을 원본 파일에 추가하여 정규화된 이름을 사용하지 않아도 됩니다.

클래스, 구조체, 모듈 또는 인터페이스 외부의 네임스페이스 수준에서 선언된 열거형은 표시되는 네임스페이스의 멤버입니다.

열거형에 대한 선언 컨텍스트는 원본 파일, 네임스페이스, 클래스, 구조체, 모듈 또는 인터페이스여야 하며 프로시저가 될 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.

전체적으로 열거형에 특성을 적용할 수 있지만 멤버에는 개별적으로 적용할 수 없습니다. 특성은 어셈블리의 메타데이터에 정보를 제공합니다.

데이터 형식

Enum 문은 열거형의 데이터 형식을 선언할 수 있습니다. 각 멤버는 열거형의 데이터 형식을 취합니다. Byte, Integer, Long, SByte, Short, UInteger, ULong 또는 UShort을(를) 지정할 수 있습니다.

열거형에 대한 datatype을 지정하지 않으면 각 멤버는 해당 initializer 데이터 형식을 가져옵니다. datatypeinitializer를 모두 지정하는 경우 initializer의 데이터 형식은 datatype으로 변환 가능해야 합니다. datatypeinitializer가 모두 없으면 데이터 형식의 기본값은 Integer입니다.

멤버 초기화

Enum 문은 memberlist에서 선택한 멤버의 내용을 초기화할 수 있습니다. initializer을 사용하여 멤버에 할당할 식을 제공합니다.

멤버에 대한 initializer을 지정하지 않으면 Visual Basic은 멤버를 0(memberlist에서 첫 번째 member인 경우)으로 초기화하거나 바로 앞의 member 값보다 큰 값으로 초기화합니다.

initializer에 제공된 식은 리터럴, 이미 정의된 다른 상수 및 이 열거형의 이전 멤버를 포함하여 이미 정의된 열거형 멤버의 조합일 수 있습니다. 산술 및 논리 연산자를 사용하여 이러한 요소를 결합할 수 있습니다.

initializer에서는 변수나 함수를 사용할 수 없습니다. 그러나 CByteCShort와 같은 전환 키워드를 사용할 수 있습니다. 상수 String 또는 Char 인수로 호출하는 경우 AscW를 사용할 수도 있습니다. 컴파일 시간에 평가할 수 있기 때문입니다.

열거형에는 부동 소수점 값이 있을 수 없습니다. 멤버에 부동 소수점 값이 할당되고 Option Strict이 설정되면 컴파일러 오류가 발생합니다. Option Strict이 꺼져 있으면 값이 자동으로 Enum 형식으로 변환됩니다.

멤버 값이 기본 데이터 형식의 허용 범위를 초과하거나 멤버를 기본 데이터 형식에서 허용하는 최대값으로 초기화하는 경우 컴파일러는 오류를 보고합니다.

한정자

클래스, 구조체, 모듈 및 인터페이스 멤버 열거형은 기본적으로 공용 액세스로 설정됩니다. 액세스 한정자를 사용하여 액세스 수준을 조정할 수 있습니다. 네임스페이스 멤버 열거형은 기본적으로 friend 액세스로 설정됩니다. 액세스 수준을 공용으로 조정할 수 있지만 비공개 또는 보호된 액세스 수준은 조정할 수 없습니다. 자세한 내용은 Visual Basic의 액세스 수준을 참조하세요.

모든 열거형 멤버는 공용 액세스 권한을 가지며 액세스 한정자를 사용할 수 없습니다. 그러나 열거형 자체에 더 제한된 액세스 수준이 있는 경우 지정된 열거형 액세스 수준이 우선합니다.

기본적으로 모든 열거형은 형식이며 해당 필드는 상수입니다. 따라서 Shared, StaticReadOnly 키워드는 열거형 또는 해당 멤버를 선언할 때 사용할 수 없습니다.

여러 값 할당

열거형은 일반적으로 상호 배타적 값을 나타냅니다. Enum 선언에 FlagsAttribute 특성을 포함하면 열거형 인스턴스에 여러 값을 할당할 수 있습니다. FlagsAttribute 특성은 열거형을 비트 필드, 즉 플래그 집합으로 처리하도록 지정합니다. 이를 bitwise 열거형이라고 합니다.

FlagsAttribute 특성을 사용하여 열거형을 선언하는 경우 값에 2, 즉 1, 2, 4, 8, 16 등의 권한을 사용하는 것이 좋습니다. 또한 "None"은 값이 0인 멤버의 이름이 되는 것이 좋습니다. 추가 지침은 FlagsAttributeEnum을(를) 참조하세요.

예 1

다음 예제에서는 Enum 문을 사용하는 방법을 보여 줍니다. 멤버를 Medium이 아니라 EggSizeEnum.Medium이라고 합니다.

Public Class Egg
    Enum EggSizeEnum
        Jumbo
        ExtraLarge
        Large
        Medium
        Small
    End Enum

    Public Sub Poach()
        Dim size As EggSizeEnum

        size = EggSizeEnum.Medium
        ' Continue processing...
    End Sub
End Class

예제 2

다음 예제의 메서드는 Egg 클래스 외부에 있습니다. 따라서 EggSizeEnum은(는) Egg.EggSizeEnum(으)로 정규화됩니다.

Public Sub Scramble(ByVal size As Egg.EggSizeEnum)
    ' Process for the three largest sizes.
    ' Throw an exception for any other size.
    Select Case size
        Case Egg.EggSizeEnum.Jumbo
            ' Process.
        Case Egg.EggSizeEnum.ExtraLarge
            ' Process.
        Case Egg.EggSizeEnum.Large
            ' Process.
        Case Else
            Throw New ApplicationException("size is invalid: " & size.ToString)
    End Select
End Sub

예 3

다음 예제에서는 Enum 문을 사용하여 명명된 상수 값의 관련 집합을 정의합니다. 이 경우 값은 데이터베이스에 대한 데이터 입력 양식을 디자인하도록 선택할 수 있는 색입니다.

Public Enum InterfaceColors
    MistyRose = &HE1E4FF&
    SlateGray = &H908070&
    DodgerBlue = &HFF901E&
    DeepSkyBlue = &HFFBF00&
    SpringGreen = &H7FFF00&
    ForestGreen = &H228B22&
    Goldenrod = &H20A5DA&
    Firebrick = &H2222B2&
End Enum

예시 4

다음 예제에서는 양수와 음수를 모두 포함하는 값을 보여 줍니다.

Enum SecurityLevel
    IllegalEntry = -1
    MinimumSecurity = 0
    MaximumSecurity = 1
End Enum

예제 5

다음 예제에서는 As 절을 사용하여 열거형의 datatype를 지정합니다.

Public Enum MyEnum As Byte
    Zero
    One
    Two
End Enum

예제 6

다음 예제에서는 비트 열거형을 사용하는 방법을 보여줍니다. 비트 열거형 인스턴스에 여러 값을 할당할 수 있습니다. Enum 선언에는 열거형을 플래그 집합으로 처리할 수 있음을 나타내는 FlagsAttribute 특성이 포함됩니다.

' Apply the Flags attribute, which allows an instance
' of the enumeration to have multiple values.
<Flags()> Public Enum FilePermissions As Integer
    None = 0
    Create = 1
    Read = 2
    Update = 4
    Delete = 8
End Enum

Public Sub ShowBitwiseEnum()

    ' Declare the non-exclusive enumeration object and
    ' set it to multiple values.
    Dim perm As FilePermissions
    perm = FilePermissions.Read Or FilePermissions.Update

    ' Show the values in the enumeration object.
    Console.WriteLine(perm.ToString)
    ' Output: Read, Update

    ' Show the total integer value of all values
    ' in the enumeration object.
    Console.WriteLine(CInt(perm))
    ' Output: 6

    ' Show whether the enumeration object contains
    ' the specified flag.
    Console.WriteLine(perm.HasFlag(FilePermissions.Update))
    ' Output: True
End Sub

예제 7

다음 예제에서는 열거형을 반복합니다. GetNames 메서드를 사용하여 열거형에서 멤버 이름의 배열을 검색하고 GetValues 멤버 값 배열을 검색합니다.

Enum EggSizeEnum
    Jumbo
    ExtraLarge
    Large
    Medium
    Small
End Enum

Public Sub Iterate()
    Dim names = [Enum].GetNames(GetType(EggSizeEnum))
    For Each name In names
        Console.Write(name & " ")
    Next
    Console.WriteLine()
    ' Output: Jumbo ExtraLarge Large Medium Small 

    Dim values = [Enum].GetValues(GetType(EggSizeEnum))
    For Each value In values
        Console.Write(value & " ")
    Next
    Console.WriteLine()
    ' Output: 0 1 2 3 4 
End Sub

참고 항목