C# - 현재 Enum의 상태 체크 하기

Justin·2022년 5월 24일
0

C#

목록 보기
2/7
post-thumbnail

어떠한 상태에 따라 값이 바뀌게 하고 싶을 때 열거형인 Enum을 자주 사용하고있다. 시도하는 과정 중에서 굉장히 간단했던 건데 잘 처리를 못한 스스로를 반성하며 기록으로 남긴다.

왜 Enum 상태 체크가 필요했는가

현재 나는 게임 내에서 작동하는 Save & Load 시스템을 제작하고 있다. 유저, AI 들의 위치 값들을 잘 불러오고 있으나 현재 Episode가 몇 번인지 불러오기 위해 Enum의 상태 체크를 해야 하던 상황이다.

어떻게 구현을 해야할까?

위치 값의 경우는 종료되는 시점에 필요한 값들을 저장 해주면 되는데, Episode(Enum)의 경우는 흔히 저장할 때 썻던 int, bool과 같은 형식이 아니라 다른 방법을 써야 하지 않나 고민이 되었다.

원하는 구조는 enum의 상태가 0 부터 시작하는 숫자로 되어있으니 현재 상태를 int로 저장해놓고 불러오는 방식으로 구현하고 싶었다. 또한 괜히 int 변수 하나를 더 만들어 저장해놓고 싶지는 않았다.

아직은 감이 잘 오지 않아 일단 Enum에서 어떠한 메소드 들이 있나 MS Docs를 찾아 봤다.

https://docs.microsoft.com/ko-kr/dotnet/api/system.enum?view=net-6.0

Enum의 메소드 탐구

System.Enum.GetName

System.Enum.GetName(typeof(EpisodeState), 4);

GetName은 Value를 통해 이름(String)을 반환하는 것 return 값으로 "Episode3"이 반환 된다.

System.Enum.IsDefined

현재 있는 Enum의 개수 만큼 저장 된다.
 for (int i = 0; i < max; i++)
         {
             if (System.Enum.IsDefined(typeof(EpisodeState), i))
                 missionNum = i;
         }

IsDefined 해당 Enum 있는지 체크하고 return 값으로 해당 bool 값이 반한된다.


이런게 있구나 라는 정도로 봐도 잘 모르겠어서 비슷한 케이스가 있나 검색을 하다 어느정도 힌트를 얻었다.

System.Enum.Parse(type, string)
-- 다형성 되어있으나 이번 문제 해결에는 요걸 사용

이 메소드를 int로 캐스팅를 할 경우 현재 state를 string으로만 넣어주면 원하던 대로 int 값으로 저장을 해서 보관을 할 수 있을 것 같았다.

string 값은 정말 간단하게 현재 상태를 .ToString() 으로 변환하여 문자열 타입으로 대입해주니 원하는 대로 저장이 되었다

(int)System.Enum.Parse(typeof(불러오고자 하는 State), 불러오고자 하는 State 변수명.ToString())

아래는 내 코드에 적용 예시

(int)System.Enum.Parse(typeof(EpisodeState), 
EpisodeManager.episodeManager.episodeState.ToString())

오늘의 한 마디

지금 생각해보면 정말 별거 아닌데 enum 값을 .ToString() 변환할 수 있다는 거 자체를 생각하지 못해서 시간이 오래 걸려버렸다..

자주 사용하는 만큼 탐구가 부족했던 것이라고 생각 된다. 그래도 이번 기회에 조금 더 Enum과 친해진것 같아 나름 뿌듯 ^-^

profile
인디 게임을 만들며 공부하고 있습니다.

0개의 댓글