열거형 디자인

열거형은 멤버 형식을 강력하게 지정하고 코드의 가독성을 향상시키는 데 유용한 상수 값의 집합을 제공합니다. 열거형은 단순 열거형과 플래그 열거형으로 구분됩니다. 단순 열거형에는 비트 비교 시 결합 또는 사용되지 않는 값이 포함됩니다. 플래그 열거형은 비트 OR 연산을 사용하여 결합됩니다. 플래그 열거 값의 결합은 비트 AND 연산을 사용하여 검사합니다.

다음 지침은 최선의 방법으로 열거형을 디자인할 수 있는 방법에 대해 설명합니다.

강력한 형식의 매개 변수, 속성 및 값 집합을 나타내는 반환 값에 대한 열거형은 사용할 수 없습니다.

정적 상수 대신 열거형을 사용할 수 있습니다.

다음 코드 예제에서는 잘못된 디자인을 보여 줍니다.

Public Class BadFurnishings

    Public Shared Table As Integer = 1
    Public Shared Chair As Integer = 2
    Public Shared Lamp As Integer = 3

End Class
public static class BadFurnishings
{
    public static int Table = 1;
    public static int Chair = 2;
    public static int Lamp = 3;
}

다음 코드 예제에서는 정적 상수 대신 사용해야 하는 열거형을 보여 줍니다.

Public Enum GoodFurnishings

    Table
    Chair
    Lamp

End Enum
public enum GoodFurnishings
{
    Table,
    Chair,
    Lamp
}

운영 체제 버전 등의 열린 집합에는 열거형을 사용하지 않습니다.

이미 전달된 열거형에 값을 추가하면 기존 코드가 손상될 수 있습니다. 가능한 경우이기는 하지만 되도록 이러한 상황이 발생하지 않도록 열거형을 디자인해야 합니다.

나중에 사용하지 않을 경우 예약 열거형 값을 정의하지 않습니다.

경우에 따라, 전달된 열거형에 값을 추가하는 경우 기존 코드가 손상될 수 있습니다. 새 열거형과, 해당 값을 사용할 수 있는 멤버를 정의할 수도 있습니다.

값이 하나뿐인 열거형을 공개적으로 노출시켜서는 안 됩니다.

열거형에는 센티널 값을 포함하지 않습니다.

센티널 값은 열거형에서 값 경계를 식별하는 데 사용됩니다. 센티널 값은 일반적으로 범위 검사에 사용되며 올바른 데이터 값이 아닙니다. 다음 코드 예제에서는 센티널 값이 있는 열거형을 정의합니다.

Public Enum Furniture

    Desk
    Chair
    Lamp
    Rug
    LastValue

End Enum

public enum Furniture
{
    Desk,
    Chair,
    Lamp,
    Rug,
    LastValue   // The sentinel value.
}

단순 열거형에는 0 값을 제공하지 않습니다.

가능한 경우 이 값의 이름을 None으로 지정합니다. None이 적합하지 않은 경우 가장 많이 사용되는 값인 기본값에 0 값을 지정합니다.

다음 조건에 해당되지 않는 경우 System.Int32(대부분의 프로그래밍 언어의 기본 데이터 형식)를 열거형의 내부 데이터 형식으로 사용합니다.

  • 열거형이 플래그 열거형이고 현재 플래그가 32개보다 많거나 앞으로 더 많아질 수 있습니다.

  • 크기 열거형이 다른 비관리 코드와의 원활한 상호 운용성을 위해 내부 형식이 Int32와 달라야 합니다.

  • 내부 형식이 더 작은 경우 필요한 공간도 훨씬 줄어듭니다. 열거형을 주로 제어 흐름에 대한 인수로 사용하려는 경우 크기에 따른 차이는 거의 없습니다. 다음과 같은 경우 상당한 크기 절감 효과를 얻을 수 있습니다.

    • 열거형을 매우 자주 인스턴스화되는 구조 또는 클래스의 필드로 사용합니다.

    • 사용자가 열거형 인스턴스의 큰 배열 또는 컬렉션을 만듭니다.

    • 열거형의 인스턴스를 여러 개 serialize해야 합니다.

여러 명사 또는 명사구로 플래그 열거형의 이름을 지정하지 않습니다. 단순 열거형은 단수 명사 또는 명사구로 이름을 지정해야 합니다.

System.Enum을 직접 확장하지 않습니다.

일부 컴파일러에서는 Enum을 확장할 수 없으며 열거형을 생성하기 위해 언어 관련 키워드를 사용하여 간접적으로 확장할 수밖에 없습니다.

Portions Copyright 2005 Microsoft Corporation. All rights reserved.

Portions Copyright Addison-Wesley Corporation. All rights reserved.

디자인 지침에 자세한 내용은 참조를 "Framework 디자인 지침: 규칙, 숙어, 및 재사용에 대 한 패턴입니다.NET 라이브러리"도 서 Krzysztof Cwalina와 Brad Abrams, 게시 Addison-wesley, 2005.

참고 항목

개념

플래그 열거형 디자인

열거형에 값 추가

기타 리소스

형식 디자인 지침

클래스 라이브러리 개발을 위한 디자인 지침