Game Tech Blog

00. bit Flag , State 패턴 응용 본문

Game Dev

00. bit Flag , State 패턴 응용

jonghow 2021. 3. 14. 18:34
반응형

보통 게임 내에서 게임의 옵션의 상태를 담아놓거나, 체크, 토글 등을 세팅하기 위해서 Bit Flag (비트 플래그)를 사용한다. 

 

미사용 예)

Check 함수 선언부

사용 예)

Check함수 선언부

실제로 사용할 자료형은 bool로 안하겠지만, 걸러줄 옵션이 늘어날 수록 함수의 선언부가 저렇게 늘어나는 것 보단, 늘어나는 것에 관계없이 함수의 선언부가 일정한 것이 좋지 않은가 라는 생각을 하게된다.

 

물론, IsChecked함수를 여러번 호출하면 상관이야 없겠다만, 옵션에 따라 써야하는 변수도 늘어나야할 것이고, 이런저런 불편함이 따를것이라 생각하여 비트를 이용하는것이 옳다고 판단했다.

 

내가 원하는 결과는 "설정한 옵션값을 BitFlag로 상태를 체크하고, 그 상태에 따라 맞는 필터를 해주는 것" 이다.

 

먼저 Bit Flag에 대해 알아야 써먹을텐데 체크(언체크), 토글, 클리어를 위한 이런저런 설명이 필요하니 나중에 따로 정리하면 그쪽으로 링크를 달아놓아야할 것 같다.

 

먼저 구상한 패턴의 UML 다이어 그램은 다음과 같다. 

 

State UML

사실 뒤에 필터는 더 많긴하지만 간략화해서 3개만 사용하도록한다. 

사실 저 UML은 코드로 옮기기엔 그대로 따라 치면되기때문에 문법만 알면 쉽게 구성할 수 있을 것 같다. 

 

FilterCheck에서 비트 플래그 확인을 이용해서 비트를 켜주고, 그 비트 플래그의 상태를 검사해서 FilterA,B,C를 

Enter -> Execute -> Exit 순서로 호출할 셈이다.

 

음.. 예를 들자면 FilterCheck로 옵션을 확인했더니 A,C 옵션만 켜졌다면,

비트의 상태는 0x0101 일 것이다. 여기까지가 FilterCheck의 역할이고 나머지 실제 필터 함수는 A,B,C 로 갈아 끼워주는 느낌이다.

 

FilterA의 Enter()는 별 내용없을것이고, Execute를 수행해 걸러주고, Exit함수에서 플래그를 꺼주면된다.

나머지 필터도 동일하게 하면 될 것이다.

 

이렇게 보니까 단순한 구성인 것 같다. 

 

나중에 가능하면 유니티로 유아이를 구성해서 포스팅을하면 이해가 빠를것 같기도하다.

반응형
Comments