내일배움캠프 8일차 TIL - 매직 넘버를 잡자

권태하·2024년 4월 24일
post-thumbnail

매직 넘버

매직 넘버란?

코드 중에 어떤 의미인지 모르는 값을 매직 넘버라고 부른다.

매직 넘버의 문제점

예를 들어, 코딩을 하던 중 switch문으로 조건을 달기 위해

int number = XX

switch (number)
	case 0:
    	~~~~
        ~~~~
        break;
    case 1:
    	~~~~
        ~~~~

이런 식으로 코드를 짜게 되면 0이 어떤 경우길래 밑에 라인을 따라가지? 1은 어떤 경우지? 하면서 어떤 의미인지 모르게 되기 때문에 협업을 할 때 다른 사람이 코드를 이해하는데 방해가 되며, 작성한 본인조차 받아들이는 데 시간이 걸릴 수 있다.

해결 방안

숫자를 사용해서 작성하던 코드를 열거형 enum을 사용해서 간단하게 훨씬 직관적으로 와닿을 수 있도록 바꿀 수 있었다.

열거형 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;
                }

이처럼 모르는 사람이 봐도 해당 조건이 어떤 결과를 원하는지 바로 표현할 수 있다는게 열거형의 큰 장점이다.

결론

매직 넘버를 사용하는 것은 버릇처럼 적용 할 수 있으므로 코딩을 배우는 입장에서 초기에 열거형을 쓰는 습관을 들이면 앞으로 팀 협업을 하는 과정에서 큰 도움이 될 것이라 생각한다.
열거형을 사용하는 더 깔끔한 방법이 있는 것 같은데 아직 내 실력이 모자라서 그렇게까지 활용은 안되고 있으므로 연습을 많이 해보고 참조할 만한 것들이 있는지 많이 살펴볼 필요도 있다.

profile
스터디 로그

0개의 댓글