A-Dyu의 개발 일기장

[C#] Enum을 플래그로 사용하기 본문

C#

[C#] Enum을 플래그로 사용하기

ADyu 2025. 1. 18. 22:58

C#에서 비트 값으로 플래그를 사용할 때 enum을 사용하여 쉽게 구현이 가능하다.

[Flag]
enum FlagEnum{
    Flag1 = 1,
    Flag2 = 2,
    Flag3 = 4,
}

만약 플래그의 개수가 많아진다면 비트 연산자로 비트를 옮겨 사용할 수 있다. 이것이 가능한 이유는 리터럴과 리터럴의 연산은 컴파일 시간에 계산해 하나의 상수로 컴파일되기 떄문이다.

[Flag]
enum FlagEnum{
    Flag1 = 1 << 0,//1
    Flag2 = 1 << 1,//2
    Flag3 = 1 << 2,//4
    None = 0, // 0
    All = ~0, // 모든 비트가 1
}

그리고 or 비트 연산자를 사용하여 플래그를 지정해 사용한다.

 

만약 특정 플래그를 포함하는지 확인하려면, HasFlag 메소드를 사용하면 된다.

FlagEnum flag = FlagEnum.Falg1 | FlagEnum.flag2;
flag.HasFlag(FlagEnum.Flag1); // true
flag.HasFlag(FlagEnum.Flag3); // false

 

그리고 이걸 사용할 땐 이것이 플래그 Enum이라는 Flag어트리뷰트를 사용해야 하며, 이 어트리뷰트가 붙은 Enum은 ToString시 정수가 아닌 모든 플래그를 쉼표로 구별한 문자열을 반환한다.

enum Enum1
{
    V1 = 1, 
    V2 = 2,
}
[Flags]
enum Enum2
{
    V1 = 1,
    V2 = 2,
}

Enum1 e1 = Enum1.V1 | Enum1.V2;
Enum2 e2 = Enum2.V1 | Enum2.V2;

e1.ToString(); // 3
e2.ToString(); // V1, V2