카테고리 없음

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>();
}

 

지금은 합쳐서 코드르 작성했지만 함수를 나눠서 각 기능을 넣어서 사용하면 된다.