10. SaveSystem
왜 필요한가
저장 포맷(MemoryPack), 실패 처리, 슬롯 관리가 프로젝트마다 다르면 세이브 버그가 나기 쉽다. SaveSystem이 표준을 강제한다.
언제 사용하는가
게임 진행 저장/불러오기, 슬롯 존재 확인이 필요할 때.
프로젝트에서 어떤 역할인가
로컬 저장 데이터는 MemoryPack으로 직렬화한다 (JsonUtility 금지). Save.SaveCount/LoadCount/FailCount/LastSaveDurationMs를 Diagnostics에 자가 등록한다.
실제 게임에서는 언제 호출되는가
체크포인트 도달, 수동 저장, 앱 종료 직전.
코드 예제
[Inject] private ISaveSystem _save;
await _save.SaveAsync("slot1", myData);
var loaded = await _save.LoadAsync<MyData>("slot1");
관련 Sample
Samples/Save/SaveSystemSample.cs
Best Practice
저장 실패는 예외가 아니라 Result<T>로 반환되므로 반드시 IsSuccess를 확인한다. 에러 처리는 Controller 책임, Service는 결과만 반환한다.
자주 하는 실수
- 저장 데이터에
JsonUtility사용 - 저장 실패 결과를 확인하지 않고 무시
실습 과제
- 임의의 저장 데이터 클래스를 만들어
SaveAsync/LoadAsync로 왕복시켜본다. Diagnostics Workspace의Save.FailCount를 확인한다.
이전 문서 / 다음 문서
이전: 09_SceneSystem.md 다음: 11_Localization.md
관련 API
MCP_Index.md Save 섹션