[C++] enum의 기본값

enum 값 중 하나를 기본값으로 사용하려고 했다. 그래서 기본 성별을 나타내는 AG_DEFAULT를 기존 enum 중간에 끼워넣었다.

enum ACCOUNT_GENDER
{
	AG_MALE			= 1,		//!< Male
	AG_FEMALE		= 2,		//!< Female
	AG_NOTDEFINED	= 3,		//!< Not Defined
	AG_UNKNOWN		= 4,		//!< Unknown
	AG_DEFAULT = AG_FEMALE,
	AG_MAX
};

여기서 AG_MAX는 enum의 멤버 중 가장 큰 값을 나타내기 위해 추가했던 값이고, AG_DEFAULT는 AG_MAX 바로 위에 넣었다. 이렇게 코드를 고치고 마무리하려다가 문득 의문이 들었다. AG_DEFAULT 값이 2일 테니, AG_MAX의 값은 전처럼 5일까? 아니면 6일 됐을까? 그것도 아니면 AG_DEFAULT보다 1이 더 큰 3이 됐을까? 나로선 5가 나오길 기대하고 있었기에 검증할 겸 단위 테스트 코드를 짰다.

SUITE(SmartDBTest)
{
	TEST(GenderValues)
	{
		DWORD expectedAgMax = AG_UNKNOWN + 1;
		DWORD agMax = static_cast<DWORD>(AG_MAX);
		CHECK(agMax == expectedAgMax);
	}
}

이 테스트가 성공했으면 굳이 블로그에 포스팅하지 않았을 것이니, 당연히 이 테스트는 실패한다. 디버거로 agMAX와 expectedAgMax 값을 확인해보면 각각 3과 5이다. 아무래도 멤버 값을 지정해주지 않으면 소스 코드 상의 위치에 따라 값이 정해지나 보다. 이런 경우엔 AG_DEFAULT를 AG_FEMALE 바로 아래에 두면 원하는 결과가 나온다.

enum ACCOUNT_GENDER
{
	AG_MALE			= 1,		//!< Male
	AG_FEMALE		= 2,		//!< Female
	AG_DEFAULT = AG_FEMALE,
	AG_NOTDEFINED	= 3,		//!< Not Defined
	AG_UNKNOWN		= 4,		//!< Unknown
	AG_MAX
};

최 재훈

블로그, 페이스북, 트위터 고성능 서버 엔진, 데이터베이스, 지속적인 통합 등 다양한 주제에 관심이 많다.
Close Menu