Programming/C# & Unity
C# Enum Flag
장형이
2022. 9. 16. 18:46
Item에 대한 속성(버리기 가능, 사용 가능, 장착 가능, 강화 가능)을 하나의 변수에다가 담고 싶다.
그럴땐 Enum을 사용하여 Flag 연산을 통해 작업을 하는 것이 편하고 싸다.
이렇게 Enum을 정의하여 나는 포션이라는 타입에다가 Deletable과 Usable 속성을 합쳐서 하나의 변수에 담을 수 있게 되었다.
플래그를 꺼내서 사용할 때에는 위와 같은 방식으로 사용하는게 예쁘다.
여기서 궁금한 내용이 ~0가 뭔가? 싶었는데, 물결표 연산자는 이진수 값을 모두 뒤집은 것.
즉 0의 이진수 값은 00000000..인데 이를 뒤집은 뒤집은 11111111... 이며 값은 -1이다.
그래서 모든 Flag 연산에 or을 걸어도 True를 내뱉을 수 있는 All로써 제격인 값.
다른 방법으로는 Int.MaxValue를 사용하여 처리를 하기도 하는 것 같지만 ~0이 더 간단하고 간지나니 이 방향도 나쁘지 않은 것 같다.
하지만 이 방식 외에 다른 값에서 ~0을 -1의 의미로 넣는 짓은 하지말았으면 좋겠다.