
코드 중에 어떤 의미인지 모르는 값을 매직 넘버라고 부른다.
예를 들어, 코딩을 하던 중 switch문으로 조건을 달기 위해
int number = XX
switch (number)
case 0:
~~~~
~~~~
break;
case 1:
~~~~
~~~~
이런 식으로 코드를 짜게 되면 0이 어떤 경우길래 밑에 라인을 따라가지? 1은 어떤 경우지? 하면서 어떤 의미인지 모르게 되기 때문에 협업을 할 때 다른 사람이 코드를 이해하는데 방해가 되며, 작성한 본인조차 받아들이는 데 시간이 걸릴 수 있다.
숫자를 사용해서 작성하던 코드를 열거형 enum을 사용해서 간단하게 훨씬 직관적으로 와닿을 수 있도록 바꿀 수 있었다.
상수를 기호화 한다고 이해하면 될 것 같다.
enum MyEnum
{
Value1,
Value2,
Value3
}
위와 같이 enum 안에 의미있는 이름을 넣어서 사용하게 된다. 또한 각 이름들은 별다른 설정을 하지 않으면 0부터 1씩 증가하게 정수와 대응한다.
따라서 아래와 같이 적용을 해봤다.
int shopAction = SelectNumber(2);
switch (shopAction)
{
case 0:
quitShop = true;
break;
case 1:
quitBuyItem = false;
do
{
BuyShopItem();
}
while (!quitBuyItem);
break;
case 2:
quitSellMyItemCheck = false;
do
{
SellMyItem();
}
while (!quitSellMyItemCheck);
break;
}
위와 같았던 코드를 열거형을 사용해 아래와 같이 바꿨다.
enum ShopAction
{
QuitShop,
BuyItem,
SellItem
}
===========================================================================
ShopAction shopAction = (ShopAction)SelectNumber(2);
switch (shopAction)
{
case ShopAction.QuitShop:
quitShop = true;
break;
case ShopAction.BuyItem:
quitBuyItem = false;
do
{
BuyShopItem();
}
while (!quitBuyItem);
break;
case ShopAction.SellItem:
quitSellMyItemCheck = false;
do
{
SellMyItem();
}
while (!quitSellMyItemCheck);
break;
}
이처럼 모르는 사람이 봐도 해당 조건이 어떤 결과를 원하는지 바로 표현할 수 있다는게 열거형의 큰 장점이다.
매직 넘버를 사용하는 것은 버릇처럼 적용 할 수 있으므로 코딩을 배우는 입장에서 초기에 열거형을 쓰는 습관을 들이면 앞으로 팀 협업을 하는 과정에서 큰 도움이 될 것이라 생각한다.
열거형을 사용하는 더 깔끔한 방법이 있는 것 같은데 아직 내 실력이 모자라서 그렇게까지 활용은 안되고 있으므로 연습을 많이 해보고 참조할 만한 것들이 있는지 많이 살펴볼 필요도 있다.