반응형
'Flags' 어트리뷰트
Enum 타입을 이진수로 구성하여 사용할 수 있도록 해줍니다. 이는 하나의 Enum 변수가 여러개의 값을 가질 수 있도록 가능하게 해줍니다.
예제
using System;
public class Example
{
[Flags]
private enum eCheck : byte
{
None = 0,
Apple = 1 << 0, // 2의 0승
Banana = 1 << 1, // 2의 1승
Pineapple = 1 << 2, // 2의 2승
All = byte.MaxValue,
}
private eCheck check = eCheck.None;
public void Main()
{
// 추가
check |= eCheck.Apple;
check |= eCheck.Banana;
check |= eCheck.Pineapple;
Console.WriteLine(check); // = Apple | Banana | Pineapple;
// Apple 있는지 체크
bool isExist = (check & eCheck.Apple) != 0;
Console.WriteLine($"Apple Exist Resut: {isExist}");
// 제거
check &= ~eCheck.Apple;
check &= ~eCheck.Banana;
check &= ~eCheck.Pineapple;
Console.WriteLine(check); // = None;
// Apple 있는지 체크
isExist = (check & eCheck.Apple) != 0;
Console.WriteLine($"Apple Exist Resut: {isExist}");
// Results :
// Apple, Banana, Pineapple
// Apple Exist Resut: True
// None
// Apple Exist Resut: False
}
}
위의 코드에서 보시다시피 Enum을 '[Flags]' 어트리뷰트로 선언하고, 각각의 값에 대해서 시프트 연산으로 값으로 표현해줍니다. 그리고 이후 변수를 선언 후 이진연산을 통해서 값을 추가해줄 수 있습니다.
이미지
이미지 예시를 보면 이진 연산으로 실제로 이진값으로 111로 들어갔습니다. 이는 'Apple | Banana | Pineapple'을 의미합니다. 다른 예시로 101이라면 'Apple | Pineapple'이 되는 것이 되겠습니다.
사용의 이유와 목적
먼저 여러 개발자 입장에서 직관적으로 표현됩니다. boolean의 경우 하나의 상태만을 보여줄 수 있는데, 하나의 값으로 여러 상태를 표현하고 싶은 경우 사용 목적에 해당됩니다..
마무리
여러가지의 값을 한번에 넘겨주고 싶을 때, 또는 여러개의 옵션 값을 넘겨주고 싶은 경우 사용하면 편리하게 사용할 수 있습니다. 시프트 연산으로 표현이 가능하면서 동시에 가독성이 좋아 데이터를 효율적이게 사용할 수 있습니다.
반응형
'Study' 카테고리의 다른 글
프로그램의 정확 시간 측정이 어려운 이유와 해결 방법 제시 (0) | 2022.08.16 |
---|---|
C#, 우선순위 큐 개념과 힙을 통한 구현 (1) | 2022.07.10 |
Unity, 코루틴과 멀티쓰레드의 차이 (3) | 2022.02.12 |
HTTP 통신과 TCP 통신의 차이와 이해 (0) | 2022.02.10 |
C#, 매개 변수 한정자 out과 ref 기능 및 class 사용 이유 (0) | 2022.02.09 |
댓글