다른 사람의 코드를 보다가 선언된 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 계산이 들어가서 숫자로 출력되는 것을 볼 수 있다.
'Unity & C#' 카테고리의 다른 글
[C#] C# 과 .NET Framework (0) | 2023.03.25 |
---|---|
[Unity] AudioSettings.dspTime 이란? (0) | 2023.03.24 |
[유니티] namespace 작성 꿀팁 (0) | 2022.07.26 |
[유니티] sprite atlas로 draw call을 줄여보자 (0) | 2022.07.24 |
[유니티] 스크립트 아이콘 변경 (0) | 2022.07.24 |