# 44. 설정 페이지 및 로컬 저장 (Settings Page & Local Storage)

## 1. 목표 (Goal)
- `BottomNavigationBar`에 "설정 (Settings)" 페이지를 추가합니다.
- 설정 페이지에 "메인 메뉴로 나가기 (Return to Main Menu)" 및 "다시 시작하기 (Restart Game)" 버튼을 추가합니다.
- 스테이지 클리어 시 진행 상황(스테이지, 턴, 플레이어 상태)을 로컬 스토리지(`shared_preferences`)에 자동 저장하는 기능을 구현합니다.
- 메인 메뉴에 저장된 데이터가 있을 경우 "이어하기 (CONTINUE)" 버튼을 표시하고 기능을 연결합니다.

## 2. 구현 상세 (Implementation Details)

### 의존성 (Dependencies)
- `shared_preferences` 패키지 추가.

### 로컬 저장소 (`SaveManager`)
- **파일:** `lib/game/save_manager.dart`
- **기능:**
  - `saveGame`: `BattleProvider`의 상태(스테이지, 턴, 플레이어 스탯, 인벤토리, 장비)를 JSON으로 직렬화하여 SharedPreferences에 저장.
  - `loadGame`: 저장된 데이터를 불러와 역직렬화.
  - `hasSaveData`: 저장 파일 존재 여부 확인.
  - `clearSaveData`: 저장 데이터 삭제 (리셋/디버그 용).

### 데이터 직렬화 (Data Serialization)
- **수정된 클래스:** `Character`, `StatusEffect`.
- **메서드:** `toJson()` 및 `fromJson()` 메서드 추가.
- **아이템 처리:** `Item` 객체 자체를 저장하는 대신 ID를 저장하고, 로드 시 `ItemTable`을 통해 복구.

### UI 변경 사항 (UI Changes)
- **설정 화면 (`SettingsScreen`):**
  - `lib/screens/settings_screen.dart` 생성.
  - 버튼: "게임 재시작 (Restart Game)", "메인 메뉴로 (Return to Main Menu)".
- **메인 래퍼 (`MainWrapper`):**
  - `BottomNavigationBar`에 "Settings" 탭 추가.
- **메인 메뉴 (`MainMenuScreen`):**
  - `StatefulWidget`으로 변환.
  - 초기화 시 저장 데이터 확인.
  - 저장 데이터 존재 시 "이어하기 (CONTINUE)" 버튼 표시.

### 전투 로직 통합 (Battle Logic Integration)
- **자동 저장:** `_prepareNextStage` (스테이지 클리어 후 실행) 내부에서 `SaveManager.saveGame` 호출.
- **불러오기:** `BattleProvider`에 `loadFromSave` 메서드를 추가하여 JSON 데이터로부터 상태 복구.