PR은 안 올렸고 아래와 같은 작업을 했다.
플레이어의 데이터가 워낙 방대하다 보니, 유닛 관련 데이터만 해도 엄청난 것을 볼 수 있었다. 이걸 언제 다 분석하나, 결론으로 정리할 수 있는 건 다음과 같았다.
파악한 정도로만 이 정도고, 진짜 데이터 종류가 토 나오게 많다. 심지어 리더 효과는 아직 구성도 채 안 된 상태라서 이거까지 추가되면 얼마나 머리 아플지 감이 안 잡힌다.
UI 구성을 마치고 나서 데이터를 연결하는 작업을 진행해야 했다. 데이터가 저렇게 복잡하니 결국 당사자에게 설명을 받아 들은 바로는, UnitStatus 생성자로 생성을 한 다음에 데이터에 관한 정보를 싹 다 불러오면 된단다. 그래서 일단 코드 분석을 마치고 연결을 시도해봤는데, 이전에서는 발생하지 않는 문제가 계속 발생했다.
NullReferenceException이다. 분명 Null이 나지 않도록 List나 데이터의 초기화를 마쳤는데도 계속 Null 오류가 발생하는 것을 확인했다. 구체적인 오류 발생 상황은 다음과 같았다.
초기화가 안 됐나 확인하려고 하면 그때가 되서 초기화가 되고 정상 작동을 해 버리니 디버깅이 참 어려웠다. 하지만 결국에 원인을 찾게 되었는데, 이는 결국 내 실수였다.
[Serializable]
public class TeamPresetData
{
public UnitStatus[] Statuses;
public TeamPresetData(int size)
{
Statuses = new UnitStatus[size];
}
}
처음에 Data를 저장하기 위해 만든 클래스는 이와 같이 구성되어 있었지만, 여기서 UnitStatus를 초기화하는 코드가 없었던 것이다. 이에 따라 어떨 때는 초기화가 되고, 어떨 때는 초기화가 안 되기 때문에 발생했던 문제였다.
담당자의 코드를 가져올 때 생성하는 과정에 대해 깊게 생각하지 못해 발생된 문제였다.
이에 따라서 코드를 아래와 같이 수정하여 해당 문제를 해결했다.
[Serializable]
public class TeamPresetData
{
public UnitStatus[] Statuses;
public TeamPresetData(int size)
{
Statuses = new UnitStatus[size];
// 각각의 UnitStatus를 초기화
for (int i = 0; i < size; i++)
{
Statuses[i] = new UnitStatus(null, 0);
}
}
}