Unity & C#

[C#] Flags Attribute를 활용하자!

왼손잡이개발자 2022. 8. 15. 16:02

 

다른 사람의 코드를 보다가 선언된 enum 앞에 [Flags] 또는 [System.Flags] attribute가 붙은 걸 보고 '이게 뭐지? 무슨 역할을 하지?' 하고 궁금해한 적이 있다. 궁금해만 하다가 이제서야 Flags attribute의 유용성을 알게 되었다. 특히 선언된 enum을 bitwise operation에 이용할 때 많이 유용하다.

 

예제로 flags를 착용 상태를 표현하도록 해본다.

 

UseOfFlags라는 컴포넌트를 하나 만들어서, EquipStatus 변수를 public으로 선언하고 인스펙터에서 보면, 흔히 layer 를 선택할 수 있는 것처럼 다중 선택을 할 수 있다.

 

Flags attribute의 유용함의 꽃은 log를 찍을 때 나타난다. 

숫자 1~4 까지 bitwise "|" operation으로 착용 상태를 더해주고 equipStatus를 Debug했을 때에 enum 값이 string으로 출력되는 것을 볼 수 있다.

아래 스샷에 Debug 찍힌 걸 보면 순서대로 1,2,3,4 키를 누른 것이다.

binary 숫자로 출력하면 아래와 같이 나온다

 

그렇다면 만약 Flags를 추가하지 않고 출력한다면 어떤 모습일까? [Flags] 를 주석처리하고 똑같이 log를 찍어보았다

위와 같이 선택된 enum이 하나 일때는 스트링으로 출력되는 걸 볼 수 있는데, 다중 선택되었을 땐, bitwise 계산이 들어가서 숫자로 출력되는 것을 볼 수 있다.