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