카테고리 없음
JSON을 제네릭으로 가져오는 방법
이더23
2024. 11. 29. 21:27
Unity에서 데이터를 저장하거나 불러오는 경우에 JSON형식을 많이 사용한다. 그런데 여기에 데이터 타입에 국한되지 않고 제니릭을 활용하면 더욱 유연하고 재사용 가능한 코드를 작성할 수 있다.
제네릭을 사용하는 이유
1. 코드 재사용성: 동일한 로직을 여러 타입에 대해 반복해서 작성할 필요가 없다.
2. 유연성: 특정 데이터 타입에 국한되지 않고, 다양한 클래스나 구조체에도 적용할 수 있다.
3. 타입 안전성: 컴파일 시 타입을 검증하므로, 런타임 오류를 줄이고 더 안전한 코드를 작성할 수 있다.
코드
public void SaveData<T>(T data)
{
string json = JsonUtility.ToJson(data);
File.WriteAllText(savePath + $"/{typeof(T).ToString()}.txt", json);
}
public T LoadData<T>()
{
string loadJson = File.ReadAllText(savePath + $"/{typeof(T).ToString()}.txt");
return JsonUtility.FromJson<T>(loadJson);
}
설명
SaveData<T> 메서드
- 제네릭 타입 T를 매개변수로 받아 객체 데이터를 JSON 문자열로 변환(직렬화)
- File.WriteAllText를 사용해 지정된 경로에 JSON 데이터를 저장
- typeof(T).ToString()을 사용해 타입 이름을 파일명에 활용하므로, 각 타입별로 다른 파일에 저장(클래스의 이름 자체가 문자열로 바뀐다.)
LoadData<T> 메서드
- 저장된 JSON 파일을 읽고, JsonUtility.FromJson<T> 메서드를 사용해 해당 JSON 문자열을 객체로 변환(역직렬화)
- 제네릭 타입 T로 반환하기 때문에, 호출 시 원하는 타입으로 데이터를 호출
호출하는 코드
private ItemInstance data;
public void LoadJSON()
{
//정보 저장
DatabaseManager.Instance.SaveData(data);
//정보 호출
data = DatabaseManager.Instance.LoadData<ItemInstance>();
}
지금은 합쳐서 코드르 작성했지만 함수를 나눠서 각 기능을 넣어서 사용하면 된다.