DevDino

[Unity 기술면접] Unity 데이터 저장/불러오기 본문

Unity/기술면접

[Unity 기술면접] Unity 데이터 저장/불러오기

데브다이노 2026. 1. 16. 05:55

"게임 데이터를 저장하고 불러오는 방법에는 어떤 것들이 있으며, 각각의 특징은 무엇인가요?"

Unity 데이터 저장/불러오기

PlayerPrefs

키-값(key-value) 형태로 int, float, string 타입만 저장할 수 있다.

PlayerPrefs.SetInt("HighScore", highScore);
PlayerPrefs.Save();
...
int saved = PlayerPrefs.GetInt("HighScore", 0);

장점

  • 구현이 간단하고 값을 바로 저장하고 불러올 수 있음

단점

  • 저장할 수 있는 데이터 타입이 제한됨
  • 보안이 약하고 복잡한 게임 상태 저장에는 부적합

직렬화 + 파일 저장

구조체, 클래스, 리스트, 여러 변수 등 복합적인 데이터를 저장하기 위해 직렬화(serialization)하고 파일로 저장하고 읽어오는 방식을 사용한다.
Unity에 내장된 JsonUtility로 json 직렬화/역직렬화할 수 있다.

[Serializable]
public class PlayerData
{
	public string playerName;
    public int level;
}
private string saveFilePath = Application.persistentDataPath + "/파일명.json";
public void SaveGame(PlayerData data)
{
	// 객체를 json 문자열로 직렬화
	string json = JsonUtility.ToJson(data);
    // 파일로 저장
    System.IO.File.WriteAllText(saveFilePath, json);
}
public PlayerData LoadGame()
{
	if(!File.Exists(saveFilePath))
    	return null;
    // 파일에서 json 문자열 읽기
    string json = System.IO.File.ReadAllText(saveFilePath);
    // json을 객체로 역직렬화
    PlayerData data = JsonUtility.FromJson<PlayerData>(json);
    return data;
}

장점

  • 구조화된 복잡한 데이터 저장 가능
  • 디버그, 수동 수정, 데이터 검증에 유리

단점

  • json은 텍스트 기반이라 파일 크기가 커질 수 있음
  • 직접 직렬화 로직을 작성해야 하므로 구현이 비교적 어려움
  • 보안이 약해 암호화가 필요함

요약
PlayerPrefs는 int/float/string 타입의 간단한 설정값을 저장하기에 편하고 빠르지만 복잡한 게임 상태 저장에 한계가 있다.
직렬화 + 파일 저장을 사용하면 복잡한 데이터 구조를 저장하고 불러올 수 있어서 확장성과 유연성이 뛰어나다.

참고
https://ljhyunstory.tistory.com/349