오늘의 학습 키워드
JsonSerializer.Serialize
공부한 내용
목표 : 세이브와 로드
시도한 것 : 저장할 때 JsonSerializer.Serialize(클래스)로 불러오려고 했다.
문제 : JsonSerializer.Serialize는 클래스로 불러오면 클래스 안의 구조체까지는 접근하지 못한다. 또한 프로퍼티 값이어야 읽어올 수 있다.
해결 : 사용할 때 JsonSerializer.Serialize(클래스명.클래스구조체)로 세이브 했다.
public struct CharacterInfo
{
public int Level { get; set; }
public string Name { get; set; }
public float Attack { get; set; }
public float Defense { get; set; }
public float Health { get; set; }
public float Gold { get; set; }
public bool IsDead { get; set; }
public float MaxHealth { get; set; }
public float DefaultAttack { get; set; }
public float DefaultDefense { get; set; }
}
class JsonUtility
{
public static void Save<T>(T t)
{
string json = JsonSerializer.Serialize(t);
File.WriteAllText(@"D:\data.json", json);
}
public static T Load<T>(string path)
{
var json = File.ReadAllText(path);
if (json != null)
{
return JsonSerializer.Deserialize<T>(json);
}
else
{
return default(T);
}
}
}
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Green;
Game game = new Game();
// TODO : 추후 캐릭터 선택창 만들 것
// 시작 : 캐릭터를 선택하시오
// 끝 : 캐릭터 인스턴스 생성
character = new Warrior();
var info = JsonUtility.Load<Character.CharacterInfo>(@"D:\data.json");
if (info.Name != null)
{
character.Info = info;
}
while (true)
{
game.Start();
}
}
개인 과제 질문 피드백
기능 구상이 어려울 때
- 처음 기능이 끝까지 갈 수가 없음
- 나중에 바뀌기 마련
- 개방 폐쇄 원칙(Open Close) : 확장에는 개방 수정에는 폐쇄
- 플로우 차트 만들어보기 (와이어 프레임)
변수 정하기
- 왼쪽과 오른쪽은 기획에서 달라질 수 있는 부분이다.
- 왼쪽이 필요한 경우라면 공격력이 필요한 방어구(가시방패)가 필요 한다던지 하는 경우
- 오른쪽은 그런 것이 필요하지 않을 때
가장 중요한 것은 왜 이 방식을 선택했는지에 대한 근거가 필요하다.
클래스를 어떻게 나누는가?
- 외부로 둔다면 영향을 줄 수 있는 범위가 커진다.
- 최대한 분리한다면 영향을 적게 준다. 하지만 접근하는데 불편할 수 있다.
- 이것도 상황 판단 하에 정하기 -> 장단점을 파악하면서 사용
추가 : if else와 try catch문 어떨 때 쓰는 게 좋은가
- 입력을 받았을 때 입력이 예상 가능하면 if문
- 입력이 예상 불가능 하면 try catch문
오늘의 회고
오늘은 TextRPG 구현을 마무리하고 제출하는 날이었다. 시간이 촉박했기에 부랴부랴 만드느라 코드에 대한 고민이 조금 부족했던 것 같다. 다른 사람의 코드도 보면서 좋은 방법들이 있다면 질문해보고 내 것에 적용하는 시간(리팩토링)을 가져야겠다. 팀 프로젝트도 TextRPG의 연장선으로 진행한다고 하는데 좋은 방법들을 많이 적용하도록 하고 글로 또 남겨서 헷갈릴 때마다 다시 보고 해야겠다.
내일은 이전에 언급했다싶이 리팩토링을 진행할 생각이다. 또한 깃허브에 ReadMe파일에 정리하는 시간을 가지도록 해야겠다. 내일도 파이팅!
깃허브 링크 :
https://github.com/JeongJuChan/TextRPG_Single
GitHub - JeongJuChan/TextRPG_Single
Contribute to JeongJuChan/TextRPG_Single development by creating an account on GitHub.
github.com
참고 :
https://www.csharpstudy.com/Data/Json-SystemTextJson.aspx
System.Text.Json - C# 프로그래밍 배우기 (Learn C# Programming)
System.Text.Json .NET Core 3.0에서 새로운 Json 지원 클래스로서 System.Text.Json가 내장(built-in) 되었으며, ASP.NET Core 3.0 에서 디폴트 Json Serializer가 서드파티의 Newtonsoft.Json에서 System.Text.Json 으로 변경되었다
www.csharpstudy.com
'스파르타 Unity 1기' 카테고리의 다른 글
내일배움캠프 14일차 TIL - TextRPG 리팩토링 2 (0) | 2023.08.25 |
---|---|
내일배움캠프 13일차 TIL - TextRPG 리팩토링 (0) | 2023.08.24 |
내일배움캠프 11일차 TIL - TextRPG 만들기 3 (0) | 2023.08.22 |
내일배움캠프 10일차 TIL - TextRPG 만들기 2 (0) | 2023.08.21 |
내일배움캠프 2주차 WIL - 알고리즘과 C# 게임 구현 (0) | 2023.08.20 |