반응형
C# Flag 속성 사용 | Enum Flag | FlagsAttribute
C C++ 시절에 많이 사용 하던 옵션 Flag를 Bit연산으로 설정 하거나 검색 할 때 많이 사용 했었는데
C#에서는 더 편하게 이 기능을 사용 할 수 있습니다.
enum을 선언 할 때 [Flags] 속성을 사용 하면 됩니다.
[Flags]
enum Color
{
None = 0,
Black = 1,
Red = 2,
Green = 4,
Blue = 8,
All = int.MaxValue
};
위와 같이 enum을 선언 하면 이 enum은 비트 플래그로 처리 됩니다.
enum 형은 내부적으로 기본 int 형으로 4 바이트 크기로 사용 되는데
데이터 사이즈를 줄이기 위해 byte, short등으로도 변경 할 수 있습니다.
[Flags]
enum Color : short
{
None = 0,
Black = 1,
Red = 2,
Green = 4,
Blue = 8,
All = short.MaxValue
};
이렇게 : short 와 같이 데이터 타입을 추가 해 주면 됩니다.
enum의 각각의 리스트는 위와 같이 2의 배수로 설정 해야 하는데
이게 많아지면 계산 해서 적기 불편 합니다.
다음과 같이 1비트를 쉬프트 연산과 자릿수로 표기 하면 여러모로 편하게 사용 할 수 있습니다.
[Flags]
enum Color
{
None = 0,
Black = 1 << 0,
Red = 1 << 1,
Green = 1 << 2,
Blue = 1 << 3,
All = int.MaxValue
};
사용법은
Color color = Color.Black | Color.Green | Color.Blue;
와 같이 여러 옵션을 적용 할 수 있고
if ( (color & Color.Green ) != 0 )
{
// green이 적용 되었습니다.
}
// 혹은
if ((color & Color.Green) == Color.Green)
{
// green이 적용 되었습니다.
}
string result = (color & Color.Green ) == Color.Green ? "true" : "false";
와 같이 특정 비트가 설정 되었는지 확인 할 수 있습니다.
또한 특정 플래그를 변수에 추가 하고 싶으면
color |= Color.Red;
와 같이 하면 됩니다. ( color = color | Color.Red; 와 같음.)
특정 플래그를 변수에서 삭제 하기
color &= ~Color.Red;
특정 비트를 반전 시켜 변수에 앤드 연산 시켜 주면 됩니다.
모든 플래그 초기화 : color = Color.None
모든 플래그 설정: color = Color.All
반응형
'C#' 카테고리의 다른 글
C# Math.Clamp - 원하는 범위 안에 숫자를 제한 하기 (0) | 2022.11.29 |
---|---|
C# ?. 와 ?[] 와 ?? 그리고 ??= 연산자 로 코드를 간결하게. (0) | 2022.11.16 |
C# 메인 클래스 | C# Main Method (0) | 2022.09.04 |
C# 설치 하기 (0) | 2022.08.30 |
C# 소개 (0) | 2022.08.30 |