열거형
- 기본 정수 숫자 형식의 명명된 상수 집합에 의해 정의되는 값 형식
- Enum 으로 정의
- 상호 배타적인 값의 집합에서의 선택 또는 선택의 조합을 나타낼 수 있다. 선택의 조합을 나타내려면 열거형 형식을 비트 플래그로 정의한다.
예시
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
비트 플래그로서 열거형 형식
- 열거형 형식으로 선택의 조합을 나타내려면 개별 선택이 비트 필드가 되도록 열거형 멤버를 정의한다. 즉, 이러한 멤버의 연결된 값은 제곱이어야 한다. 그리고 비트논리연산차(|, &)를 사용하여 각각 선택을 조합하거나 선택의 조합을 교차할 수 있다.
- 열거형 형식이 비트 필드를 선언한다고 표시하려면 Flags 특성을 적용한다.
- 열거형 멤버의 비트 연산은 선언된 값의 합이 다른 멤버의 값과 절대로 겹치지 않는다는 것을 전제로 한다.
[Flags]
public enum EDays
{
None = 0b_0000_0000, // 0
Monday = 0b_0000_0001, // 1
Tuesday = 0b_0000_0010, // 2
Wednesday = 0b_0000_0100, // 4
Thursday = 0b_0000_1000, // 8
Friday = 0b_0001_0000, // 16
Saturday = 0b_0010_0000, // 32
Sunday = 0b_0100_0000, // 64
Weekend = Saturday | Sunday
}
아래 weekend 처럼 saturday 와 sunday 를 조합해서 사용할 수 있다.
그렇게 되면 겹치는 멤버가 없게 항상 고유한 조합이 완성된다.
- 비트로 선언하기
[Flags]
public enum EDays
{
None = 0,
Monday = 1 << 0,
Tuesday = 1 << 1,
Wednesday = 1 << 2,
Thursday = 1 << 3,
Friday = 1 << 4,
Saturady = 1 << 5,
Sunday = 1 << 6,
Weekend = Saturday | Sunday,
}
- 조건 정의하기
예를들어 금요일을 제외했을 때 특정 코드를 실행시키려 한다면,
아래와 같이 나타낼 수 있다.
EDay type;
if( (type & EDay.Friday) == 0 )
//~~코드~~
비교해보려고 하는 type과 Friday를 ‘비트연산 &’를 시켰을 때 type의 조합에 Friday가 포함돼있지 않다면 결과가 0 이 나오므로 위와 같이 작성할 수 있다.
실제 내가 적용한 경우는 서버와 통신할 때 특정 프로토콜 타입에서의 통신 규칙을 정의하고 싶어서
프로토콜 타입으로 이넘 플래그를 정의하여 특정 프로토콜 타입이 아니라면 어떤 화면을 띄워준다~ 와 같이 적용했다.
이를 이넘 플래그로 정의한 이유는 프로토콜 타입이 다양하게 존재하기에, 이를 활용해 상황에 따라 여러 조합의 이넘 값을 만들 수가 있기 때문이다.
'C# > C# 학습 (TIL)' 카테고리의 다른 글
유니티 스크롤뷰 초기 설정 에러 기록 (0) | 2023.04.24 |
---|---|
C# CSVReader for Unity (0) | 2023.02.27 |
유니티 RectTransform (0) | 2023.01.24 |
유니티 그래픽스 퍼포먼스 최적화 관련 - 드로우콜 (0) | 2022.12.30 |
유니티 safe Area 대응 (1) | 2022.12.12 |