스파르타 게임개발종합반(Unity)/TIL - 본캠프 매일 공부 기록

2024.04.26 TIL - enum, Json 문제점

테크러너 2024. 4. 26.

Json으로 클래스 데이터 저장시 자식 클래스가 아닌 부모 클래스명으로만 저장되는 문제

        // 장착중인 방어력 아이템 능력치를 모두 더하여 반환
        public double TotalDefenseItemStatus()
        {
            double totalItemValue = 0;
            foreach (Item item in items)
            {
                Console.WriteLine(item.itemValue);               // 5
                Console.WriteLine(item.isEquipped == true);      // True
                Console.WriteLine(item.GetType());               // SpartaTextRPG.Item
                if (item.isEquipped == true && item is Armor)
                    totalItemValue += item.GetItemValue();
            }
            return totalItemValue;
        }

Item클래스를 Armor, Weapon 클래스가 상속받고 있는 구조였고, `Item is Armor` 으로 아이템의 타입이 어떤지 체크했었다.

하지만 막상 어떤 타입인지 출력해보니까 Item 클래스로 떴다..

 

  "inventory": {
    "items": [
      {
        "type": 1,
        "isEquipped": true,
        "name": "수련자 갑옷",
        "value": 5,
        "description": "수련에 도움을 주는 갑옷입니다.",
        "isSold": true,
        "price": 1000
      }
    ]

왜 그럴까 싶어서 Json 파일을 열어봤더니 Item 클래스까지만 저장이 되어있고, 자식 클래스는 알 수 없었다.

`items.Add(new Armor())` 애초에 이런식으로 자식 클래스 초기화를 했지만 Json 파일에는 반영이 안됐다.

 

 

자식 클래스명으로 타입을 아는 것이 아닌 enum으로 타입 알아내기

    public enum ITEM_TYPE
    {
        Armor =1,
        Weapon
    }

결국 enum으로 `items.Add(new Armor(ITEM_TYPE.Armor))` 각 타입들을 설정해줬다..

 

`item is 클래스명` `item.GetType()` 으로 사용했던 코드들을 싹 바꾸게 되었다. ㅠㅠ

반응형

댓글