game/prompt/21_refactor_item_system_to_...

1.9 KiB

21. 아이템 시스템 JSON 리팩토링 (Refactor Item System to JSON)

1. 개요 (Overview)

기존에 ItemTable 클래스 내부에 하드코딩되어 있던 아이템 데이터(Weapon, Armor, Shield, Accessory)를 외부 JSON 파일(assets/data/items.json)로 분리하여 관리하도록 리팩토링했습니다. 이를 통해 데이터와 로직을 분리하고, 추후 데이터 확장 및 관리를 용이하게 만들었습니다.

2. 변경 사항 (Changes)

A. 데이터 파일 생성

  • 파일: assets/data/items.json
  • 내용: 기존 ItemTable에 정의되어 있던 모든 아이템 데이터를 JSON 형식으로 이관.
  • 구조: weapons, armors, shields, accessories 4개의 배열을 포함하는 객체.

B. 설정 변경

  • 파일: pubspec.yaml
  • 내용: assets 섹션에 assets/data/ 경로 추가.

C. 코드 변경

  1. lib/game/model/item.dart
    • ItemEffect 클래스에 fromJson 팩토리 생성자 추가.
  2. lib/game/data/item_table.dart
    • ItemTemplate 클래스에 fromJson 팩토리 생성자 추가.
    • 하드코딩된 리스트(weapons, armors 등)를 빈 리스트로 초기화.
    • load() 비동기 메서드 추가: rootBundle을 통해 JSON 파일을 읽어와 리스트를 채움.
  3. lib/main.dart
    • main() 함수를 async로 변경.
    • 앱 실행 전 await ItemTable.load()를 호출하여 데이터 초기화 보장.

3. 검증 (Verification)

  • test/item_load_test.dart를 생성하여 JSON 로딩 및 파싱이 정상적으로 이루어지는지 테스트 완료.
  • 앱 실행 시 에러 없이 아이템 데이터가 로드됨을 확인.

4. 향후 계획 (Next Steps)

  • 새로운 아이템 추가 시 assets/data/items.json 파일만 수정하면 됨.
  • 상점 구매 목록 등도 JSON 데이터를 기반으로 구성 가능.