오늘도 팀프로젝트로 인해 긴 글 작성은 여유가 없어 짚고 넘어가야할 점을 간략히 기술한다.
json을 통하면 콘솔서 데이터를 저장하고 불러오는 기능을 간단히 구사할 수 있는 기능이다.
직렬화와 역직렬화를 통해 구현가능한다.
직렬화는 간단히 그냥 객체를 json 문자열로 바꿔주는 것이고 역직렬화는 반대로 json 문자열을 객체로 변환하는 작업이다.
using Newtonsoft.Json;
using 문으로 Newtonsoft.Json을 불러와 사용한다.
직렬화는 간단하다.
string inventoryFile = JsonConvert.SerializeObject(inventory);
File.WriteAllText(filePathInventory, inventoryFile);
JsonConvert의 SerializeObject 메서드를 통해 직렬화를 할 것이고 직렬화할 객체를 넘겨주기만 하면된다.
그리고 json 문자열로 만든 것을 File.WriteAllText 메서드에 파일이 만들어질 주소와 함께 건내주면 된다.
더쉽게 말하면 그냥 객체를 json 문자열로 파일화시키는것이다.
역직렬화도 비슷한데
string inventoryFile = File.ReadAllText(filePathInventory);
inventory = JsonConvert.DeserializeObject<Inventory>(inventoryFile);
인벤토리 객체에 대한 정보를 저장한 json 파일을 불러오고 이를 다시 역직렬화를 통해 인벤토리 객체에 넣어주는 모습이다.
직렬화 과정의 역순으로 진행됨을 알 수 있다.
한마디로 직렬화를 통해 json 문자열로 객체라는 선물을 포장하고 선물을 다시 이를 개방하여 객체를 쓰는 것이 역직렬화이다.
다만 list가 포함된 객체를 직렬화할때는 저장 데이터가 두배가 되는 등의 문제가 발생할 수 있다는데 이에 대해선 스파르타코딩클럽의 튜터님께 여쭈어볼 생각이다. 회의가 길어져서 물어보지 못했다... 또한 직렬화를 통해 파일에 저장하는 것은 좋은데 이 저장시기를 언제로 잡을지 또한 생각을 해봐야할 부분이다.
코스트가 있더라도 데이터가 추가될때마다 저장해줘야할지 아니면 특정 행동시에 저장한다던가 (우리 프로젝트에선 메인 메뉴로 복귀시에 넣어주었다) 아니면 종료시에 넣어주던가
여러 방면으로 고민해볼 부분이다. 일단 오늘 프로젝트 진행으로 해결하지 못한 궁금증은 조만간 튜터님께 여쭈어봐 해결할 것이다.