본문 바로가기
TIL

아이템 누적, 포션 사용 로직 연결! 전투 이후 인벤토리 리팩터링

by vvin39 2025. 4. 24.

내일배움캠프 14일차 TIL

📌 오늘의 상황

오늘은 몬스터 전투 후 드롭 아이템이 인벤토리에 정상적으로 저장되지 않는 문제와,
팀원이 만든 포션 사용 로직을 실제 인벤토리 시스템과 연동하는 작업을 진행했다.

둘 다 겉보기엔 간단해 보이지만, 내부 로직이 엮여 있어서 생각보다 시간이 꽤 걸렸다.

📌 트러블슈팅 로그

인벤토리에 아이템이 누적되지 않는 문제

문제 상황

전투 후 몬스터가 아이템을 드롭하면 player.Inven.AddItem()을 호출해 인벤토리에 넣었는데, 같은 아이템이 누적 수량이 증가하지 않고 계속 별도로 추가되어 "소형 포션", "소형 포션" 식으로 여러 개가 생기는 걸 발견했다!!

처음엔 드롭 잘 되네~ 하고 만족했지만, 보상 화면과 인벤토리 출력을 다시 보니 동일한 아이템이 따로따로 존재하는 이상한 상황이었다,,

원인 분석

 

  • 기존 AddItem() 메서드는 그냥 items.Add(item)만 호출하고 있었다.
  • 아이템이 기존에 있는지 검사하지 않았기 때문에, 동일한 이름의 아이템도 그냥 새로 추가되고 있엇다.

 

 

해결

AddItem() 로직 수정하였다.

  • item.Id기준으로 기존 아이템 존재 여부 확인
  • 존재하면 item.Count만 증가시키고
  • 없을 경우에만 리스트에 새로 추가
public void AddItem(Item item)
{
    var existingItem = items.FirstOrDefault(i => i.Name == item.Name);
    if (existingItem != null)
    {
        existingItem.Count += item.Count;
    }
    else
    {
        items.Add(item);
    }
}

이제야 인벤토리에 "소형 포션 x3"처럼 정상적으로 누적되는 모습이 나왔다.

포션 사용 로직이 인벤토리와 연동되지 않음

문제 상황

팀원이 전투 중 포션 사용 기능을 구현했지만, 실제 인벤토리에 있는 포션과 연결되지 않아 임의로 아이템을 사용할 수 있었고, 사용해도 인벤토리에서는 빠지지 않는 상황,,

원인 분석

 

  • 포션 선택 화면은 인벤토리를 참조하지 않고 임의로 그냥 고정된 목록에서 선택하게 되어 있었다.
  • 심지어 선택한 포션을 사용해도 RemoveItem() 같은 처리가 없어서 인벤토리와 전혀 연결되지 않았다.

 

 

해결

 

  • 인벤토리에서 Type == ItemType.Potion인 아이템만 필터링하여 포션 리스트 구성
  • 실제 선택된 포션 아이템을 사용한 후 인벤토리에서 제거 처리
// 포션 리스트 구성
var healItems = player.Inven.GetAllItems().Where(i => i.Type == ItemType.Potion).ToList();

// 포션 사용
player.Recovery(selectedPotion.StatPoint);
player.Inven.RemoveItem(selectedPotion);

이제 인벤토리에서 실제 있는 포션만 보이고, 사용하면 수량도 깔끔하게 줄어든다.

 

 

💭  느낀 점

 

  • 인벤토리는 단순한 리스트가 아니다. 데이터 흐름의 허브라고 느꼈다.
  • 수량 누적이나 제거 같은 사소해 보이는 로직도 게임 전체 흐름에 큰 영향을 준다.
  • 팀원이 작성한 로직을 무조건 믿기보다는, 입출력 기준으로 직접 확인하고 연동 구조를 다시 설계하는 과정이 필요하다.
    (중요하지만 너무 힘들고,, 귀찮고,, 할 일이 너무 많아요,,)

 

🔑  기억 포인트

트러블 종류 원인 해결 방법
아이템 누적 안 됨 기존 아이템 검사 없이 새로 추가함 Name 기준 중복 확인 후 수량만 증가
포션 연동 실패 인벤토리를 참조하지 않고 UI 구성, 제거 처리 누락 인벤토리에서 필터링 및 RemoveItem() 호출
인벤토리 출력과
실제 데이터 불일치
UI와 데이터 흐름이 따로 놀고 있었음 로직을 인벤토리 중심으로 재설계

 

 

 

 

최근댓글

최근글

skin by © 2024 ttuttak