# 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 데이터를 기반으로 구성 가능.