[2025_10_02]Json-1
2025. 10. 2. 20:59ㆍTIL
저장/로드 기능 구현과 Json
- 구조 설계
- GameManager 네임스페이스 내에 두 가지 클래스로 구분
- SaveData 클래스 : 진행 중인 게임 데이터를 담는 역할
- GameSaveManager 클래스 : 실제 저장/로드 메서드를 선언하고 구현
- GameManager 네임스페이스 내에 두 가지 클래스로 구분
- 직렬화(Serialization)
- 객체 → 바이트 단위 / 문자열로 변환하는 과정
- 필요한 이유:
- 프로그램 종료 시 메모리 해제 → 데이터 유지 불가
- 메모리 주소는 로컬이라 다른 컴퓨터로 전송 불가
- 파일로 저장 불가 → 직렬화 필요
- 네트워크 통신(멀티플레이)에서도 필수
- 주의 : static 변수는 직렬화 불가
- 예시 : "Name:전사, Level:5, Hp:100"
- 생성자 필요성
- 빈 생성자 : Json 역직렬화(로드 시) 필요
- 매개변수 생성자 : 직렬화(세이브 시) 데이터 전달에 필요
2. 문제 상황 (입력 처리 버그)
- 상황
- Start 메서드에서 while(true)로 숫자 입력을 받아 기능 실행
- 정상 입력(숫자) 시 잘 동작
- 하지만 문자 입력(f) 후 숫자 입력 시 엉뚱한 화면 전환 발생
- 원인
- try-catch에서 FormatException은 잡았지만,
- catch 이후에 break를 하지 않아 다시 while을 돌며 흐름이 꼬임
- 해결 방법
- int.TryParse 사용
- 입력값이 int라면 result 반환
- 숫자가 아니면 오류 메시지 출력 후 다시 입력 받음
- int.TryParse 사용

하지만 이렇게 해결 하려니.... Console.ReadLine으로 값을 받아오는 대부분의 코드에 위의 코드들을 추가해야 했다.
그래서


이렇게 Util namespace안에 Utility class에 이 메서드를 구현해서 input마다 체크해서 result를 반환하도록 했다.
3. 배운 점
- 디버깅 시 중단점(Breakpoint) 활용의 중요성
- 예외 발생 후 프로그램 흐름을 따라가며 정확히 어디서 다시 루프를 타는지 확인 가능
- 단순 추측보다는 실행 흐름을 직접 확인하는 습관 필요
'TIL' 카테고리의 다른 글
| [2025_10_14]새로운 팀원과 TextRpg팀프로젝트 시작 (0) | 2025.10.14 |
|---|---|
| [2025_10_13]TextRpg 개발 회고 (0) | 2025.10.13 |
| [2025_10_01]foreach문에서의 데이터 변경 (0) | 2025.10.01 |
| [2025_09_29]클래스와 메서드 나누기 (0) | 2025.09.29 |
| [2025_09_26]for VS while,Array VS List (0) | 2025.09.26 |