다음을 통해 공유


플래그 열거형 디자인

업데이트: 2007년 11월

플래그 열거형은 비트 필드를 마스킹하고 비트 비교를 수행하는 데 사용되며, 여러 열거형 값을 동시에 지정할 수 있는 경우 사용하는 올바른 디자인입니다. 예를 들어, GenericUriParserOptions 열거형 값 중 임의의 값을 조합하여 제네릭 URI(Uniform Resource Identifier) 파서를 구성할 수 있습니다.

비트 OR 연산을 사용하여 자유롭게 조합할 수 있도록 플래그 열거형의 값에 2의 제곱을 사용합니다.

중요

2의 제곱 또는 2의 제곱의 조합을 사용하지 않으면 비트 연산이 예상대로 작동하지 않습니다.

자주 사용하는 플래그 조합에는 특수 열거형 값을 제공할 수 있습니다.

플래그 열거형 값을 조합하는 것은 일반적인 시나리오를 구현하는 개발자에게 필요하지 않은 중급 기술입니다. 예를 들어, FileShare 열거형에는 공유 파일을 읽기 또는 쓰기용으로 열 수 있도록 지정하는 ReadWrite 값이 포함되어 있습니다. 이를 통해 개발자는 공유 파일을 읽기 또는 쓰기용으로 열 수 있다는 것을 알 수 있으므로 열거형 값의 조합을 단일 값으로 지정하는 방법을 배우지 않아도 됩니다.

값의 조합이 잘못된 경우에는 플래그 열거형을 만들지 않습니다.

이 문제는 일반적으로 열거형 의미의 정확도가 떨어짐을 나타냅니다. 각 열거형이 보다 정확한 값 집합을 갖도록 열거형을 두 개 이상의 열거형으로 나눌 수 있습니다. 예를 들어, 다음과 같이 잘못 정의된 열거형이 있다고 가정합니다.

<Flags()> _
Public Enum PurchaseTypes

    SalePrice
    RegularPrice
    Book
    CompactDisk

End Enum
[Flags]
public enum PurchaseTypes
{
    SalePrice,
    RegularPrice,
    Book,
    CompactDisk
}

디자이너에서 이 열거형을 다음 메서드와 함께 사용하려고 합니다.

Public Overloads Function FindPriceForItem(ByVal title As String, ByVal purchase As PurchaseTypes) As Single
    Return 0
End Function
public float FindPriceForItem(string title, PurchaseTypes purchase)

이 메서드를 호출하면 purchase 매개 변수가 SalePrice 또는 RegularPrice 값 중 하나와 Book 또는 CompactDisk 값 중 하나를 정확히 지정합니다. 개발자는 설명서를 참조하거나 해당 메서드를 테스트하지 않고서 이 조건을 결정할 수 없습니다. 더 좋은 접근 방법은 다음 코드 예제에서와 같이 두 가지 정보를 분리하여 각각 고유한 열거형에 배치하는 것입니다.

Public Enum ItemType

    Book
    CompactDisk

End Enum

Public Enum PriceType

    SalePrice
    RegularPrice

End Enum
public enum ItemType
{
    Book,
    CompactDisk
}

public enum PriceType
{
    SalePrice,
    RegularPrice,
}

다음 코드 예제에서와 같이 이제 메서드 시그니처가 새 디자인을 반영하도록 변경됩니다.

Public Overloads Function FindPriceForItem(ByVal title As String, ByVal name As ItemType, ByVal price As PriceType) As Single
    Return 0
End Function
public float FindPriceForItem(string title, ItemType name, PriceType price)

값을 사용하여 모든 플래그가 지워졌음을 나타내는 경우가 아니면 플래그 열거형 값을 0으로 설정하지 않습니다. 다음 지침에 설명된 대로 이러한 값의 이름은 올바르게 지정되어야 합니다.

이 지침은 플래그 열거형에만 해당됩니다. 단순 열거형의 경우 0 값을 사용해야 하거나 사용할 수 있습니다.

플래그 열거형의 0 값 이름을 없음으로 지정합니다. 플래그 열거형의 경우 해당 값은 항상 모든 플래그가 지워졌음을 나타내야 합니다.

중요

다른 상태를 나타내기 위해 플래그 열거형의 0 값을 사용하지 않습니다. 설정된 플래그가 없는 경우와 반대로 명시적으로 설정된 0 값 플래그는 확인할 수 없습니다.

Portions Copyright 2005 Microsoft Corporation. All rights reserved.

Portions Copyright Addison-Wesley Corporation. All rights reserved.

디자인 지침에 대한 자세한 내용은 2005년에 Addison-Wesley에서 책으로 출간한 Krzysztof Cwalina와 Brad Abrams의 "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries"를 참조하십시오.

참고 항목

개념

열거형 디자인

열거형에 값 추가

기타 리소스

형식 디자인 지침

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