2024년 5월 03일 금요일 개발일지 / 팀 프로젝트 진행 상황과 느낀 점

2024. 5. 3. 21:06나의 개발자 기록/본 캠프 개발 일지

2024년 5월 03일 금요일


팀 프로젝트 진행 상황에 대해서
var groupInventory = from InventoryItem in Items
                     orderby InventoryItem.Type
                     group InventoryItem by InventoryItem.Name into groupInventoryItem
                     select new { InventoryGroupKey = groupInventoryItem.Key, InventoryCount = groupInventoryItem.Count() };
                     
var groupShop = from ShopItem in Items
                orderby ShopItem.Type
                group ShopItem by ShopItem.Name into groupShopItem
                select new { ShopGroupKey = groupShopItem.Key, ShopCount = groupShopItem.Count() };

 

어제 groupBy를 써보고 이에 대한 정리를 하려 했습니다만... 제 수준으로는 이 친구를 어떻게 써먹어야 할지 감도 안 잡혔습니다. 인터넷에서 검색하고 예시를 통해서 변수 이름이나 리스트 배열 등등을 알맞게 짜 맞춰서 넣어봤는데... 저희 팀 프로젝트에서 사용하기에는 전체적인 구조도 수정해야 하고 여러 가지로 문제점이 많을 것 같아서 폐기 처분하는 것으로 결정됐습니다. 그래서 이번 아침 회의를 통해서 Item 클래스에 Count 프로퍼티 변수를 만들어서 개수를 세는 방식으로 결정하게 됐습니다.

 

 

저희 팀에서 잘하시는 분이 제가 담당한 상점 & 인벤토리 개편하는 부분에 대한 간단한 설명을 해주셨습니다. 근데 저는 그 설명이 저한테는 너무 어려운 느낌이 들었고, 막상 혼자서 구매와 판매 부분의 함수를 수정하고, 인벤토리에서 따로 아이템 추가와 제거 부분을 만들기에는 벅찬 느낌을 받았습니다. 일단 어떻게 할지 이것저것 만져보다가 점심시간이 왔고, 점심도 대충 때우고 만들어 봤는데... 제가 만든 부분이 좀 아닌 것 같아서 잘하시는 분께서 오시면 어떤 식으로 만들면 좋을지에 대해서 물어보게 되었습니다.

 

 

잘하시는 분께서 친철하게 주석으로 어떤 식으로 하고 이러한 조건으로 만들면 된다고 상세하게 설명해 주시고 알려주셨습니다. 그래서 그걸 기반으로 일단 한 번 만들어 봤습니다. 만들어 보고 나니 뭔가 그럴싸하게 구매도 되고, 같은 물건을 샀을 때 기존에 있던 물건이 중첩되어 개수가 늘어나는 식으로 구현이 잘 된 것 같았습니다.

 

public void Sell(Player player, int inventoryItemindex)
{
    int sellItemPrice = Convert.ToInt32(Math.Round(Items[inventoryItemindex].BaseItem.Price * 0.85f));
    ShopItem? findShopItem = Items.Find(item => item.BaseItem.Id == player.Inventory.Items[inventoryItemindex].BaseItem.Id);
    if (findShopItem != null)
    {
        findShopItem.IsPurchased = false;
    }
    player.Inventory.RemoveItem("Items[inventoryItemindex].BaseItem");
    // player.Inventory.Items.RemoveAt(inventoryItemindex);
    player.Gold += sellItemPrice;
    Console.WriteLine($"\n{sellItemPrice}G에 판매를 완료했습니다.");
    Thread.Sleep(500);
}

public void RemoveItem(Item item)
{
    InventoryItem? findItem = Items.Find(inventoryItem => inventoryItem.BaseItem.Id == item.Id);
    // if 해당 아이템이 여러개인 경우 카운트 감소
    if(findItem?.BaseItem.Count > 1)
    {
        findItem.BaseItem.Count--;
    }
    else // else 해당 아이템이 한개인 경우 리스트에서 제거
    {
        Items.Remove(findItem);
    }
}

 

그렇게 잘 된 줄 알았는데, 판매할 때 여러 개의 물품이 있으면 하나를 판매 했을 때 무한으로 팔리는 버그가 있었습니다. 뭐가 문제인지 몰라서 물어보니까 판매의 Items[inventoryItemindex].BaseItem 이 부분의 Items 클래스가 상점이 기준이었기 때문에 발생한 문제라고 하시더군요. 그래서 말씀하신 대로 player.Inventory.Items[inventoryItemindex].BaseItem 로 플레이어의 인벤토리의 기준인 아이템으로 바꿨더니 정상적으로 작동이 되었습니다.

 

 

일단 지금까지 작업 내용을 구매 및 판매 기능 개선이라는 이름으로 커밋한 후에 저는 노션에 작업한 내용들을 정리했습니다. 그 다음 제가 작업했던 것 중 불필요한 코드를 없앤 후, 재차 커밋했고, RP까지 진행했습니다. 잘하시는 분께서 제가 작업한 내용이랑 다른 분이 작업한 것을 Merge 하셨고, 플레이어 데이터 저장 기능을 테스트를 진행했는데, 오류가 떠서 여러 가지로 문제가 많이 있었습니다. 아무래도 주말에 마저 작업을 해야할 수도 있을 것 같네요.

 


오늘 프로젝트를 하면서 느낀 점

 

잘하시는 분께서 배려를 많이 해주셨는데도 불구하고, 뭔가 제가 구현할 수 있는 부분의 한계가 많다고 해야 하나 지금 이 프로젝트의 전반적인 부분에 대해서 이해를 했다고 한다면 50%? 아니 40% 정도도 안 되는 것 같습니다. 물론 하나하나 복기 하면서 이해를 하고 넘어간다면 지금 하고 있는 팀 프로젝트에서 좀 더 확실하게 이해를 할 수 있지만, 그럴 시간이 많지 않았습니다. 하여튼 그래서인지는 몰라도 클래스를 변수로 선언한다거나 리스트 변수로 선언한다거나 하는 부분이 조금은 이해가 되지만, 이 많은 것들을 이용해서 엮었을 때 이해하는 이해력이 좀 낮다고 해야 하나... 여러 가지로 문제가 많은 것 같습니다. 또한 매개변수에 대한 개념은 알고 있는데, 이 매개변수가 어떨 때 사용되고, 어떤 방식으로 적용되는지, 그리고 어떤 식으로 활용 및 응용을 하는지에 대한 이해력을 키워야 할 것 같습니다. 그리고 다음 주에 예비군을 가야 하기 때문에 남는 시간을 공부에 좀 더 투자하고, 주말에도 빡세게 공부해서 C#을 더 이해할 수 있는 시간이 필요할 것 같습니다.