1. 문제 상황
게임 오브젝트가 파괴되었지만, 해당 오브젝트에서 생성한 클래스가 살아있어 데이터가 제대로 세팅되지 않음
2. 원인 분석
C#에서 new 키워드를 통해 생성된 클래스 인스턴스는 힙 메모리(Heap)에 할당되며,
해당 객체에 대한 참조가 남아있는 한 가비지 컬렉터(GC)에 의해 정리되지 않고 계속 유지된다.
3. 해결 방법
- 오브젝트가 파괴될 때, 직접적으로 생성한 클래스 인스턴스를 명시적으로 해제하거나 null로 초기화하여 GC가 해당 인스턴스를 수거할 수 있도록 돕는다.
- 특히 OnDestroy()나 Dispose() 등의 타이밍에서 관리하는 것이 좋다.
public class Inventory
{
private ItemData[] items = new ItemData[100];
}
public class Player : MonoBehaviour
{
private Inventory playerInventory;
private void Start()
{
playerInventory = new Inventory(); // new로 생성됨
}
private void OnDestroy()
{
playerInventory = null; // 참조 해제 (명시적 해제 필요)
}
}
4. 개인적인 생각
new로 생성된 인스턴스는 눈에 보이지 않더라도 메모리에 남아있다는 점을 다시금 상기하게 되었다.
Unity에서 GC가 있어서 이런 경우가 생길거라고 생각을 못했는데, 너무 안일하게 작업을 한거 같다.
메모리 관리에 조금 더 신경써줘야겠다.
'Unity > 트러블 슈팅' 카테고리의 다른 글
| [Unity] Enum을 추상화 했을때 발생한 트러블 슈팅 (0) | 2025.06.24 |
|---|---|
| [Unity] null처리가 되었는데 Debug.Log에 출력 되는 현상 (0) | 2025.06.20 |
| [Unity] Fade가 끊기는 문제 해결 (0) | 2025.06.18 |
| [Unity] Time.unscaledDeltaTime이 첫 프레임에 튀는 현상 (0) | 2025.06.17 |
| [Unity] 인벤토리 - 슬롯 선택 동작 오류 (0) | 2025.05.30 |