[Unreal 5] 언리얼 엔진의 가비지 컬렉션(Garbage Collection, GC)

2025. 5. 21. 09:52·Unreal 5/Study

서론

필자는 C++을 주로 사용해 개발해왔기에, 가비지 컬렉션(Garbage Collection)은 ‘약자들이나 쓰는 기능’이라며 멸시해왔다. 하지만 언리얼 엔진을 사용할 때는, 언리얼의 게임 프레임워크 클래스들을 반드시 사용해야 하며, 이 수많은 클래스들의 생명 주기를 정확히 알지 않는 이상, 직접적인 메모리 관리는 사실상 불가능하다.
따라서 언리얼에서는 더 이상 참조되지 않거나 명시적으로 소멸 예약된 UObject를 주기적으로 정리하기 위해, 자체적인 가비지 컬렉션 시스템을 사용한다.

Garbage Collection

제목에 '언리얼 엔진의 가비지 컬렉션'이라 적었지만, 사실 언리얼만의 독특한 방식이 있는 것은 아니다. 기본적으로는 일반적인 가비지 컬렉션 원리를 따른다.
다만 차이점이 있다면, UObject를 기반으로 한 객체들만 가비지 컬렉션의 관리 대상이라는 점이다. 그리고 그 수집 방식은 Mark and Sweep 기법을 사용한다.

Mark & Sweep from wiki

가비지 컬렉션은 편리하다. 하지만 개발을 하다 보면 네이티브 C++ 클래스를 직접 사용해야 하는 상황이 반드시 생긴다. 이때 언리얼의 가비지 컬렉션이 메모리를 관리해주는 범위는 UObject에 국한되기 때문에, 메모리 관리에 대한 경각심은 항상 유지해야 한다.

또한, 언리얼의 GC 시스템은 UObject를 추적할 때 리플렉션 시스템에 등록된 경로만을 따라간다. 즉, UPROPERTY() 매크로로 선언된 멤버 변수만이 가비지 컬렉션에 의해 추적 대상이 된다.

예를 들어, 아래와 같은 코드에서는 MyObject는 GC의 추적 대상이 되지 않아 메모리 누수가 발생할 수 있다:

class AMyActor : public AActor
{
    GENERATED_BODY()

private:
    UObject* MyObject; // UPROPERTY가 아님!

    void Init()
    {
        MyObject = NewObject<USomeObject>(this);
    }
};

위 코드에서 MyObject는 UObject를 가리키고 있지만, UPROPERTY()로 선언되지 않았기 때문에 GC가 이 포인터를 추적하지 못한다. 결국 MyObject가 유일한 참조였을 경우, 수집 대상이 되며 나중에 예기치 않은 접근 오류가 발생할 수 있다.

이를 방지하기 위해서는 다음과 같이 선언해야 한다:

UPROPERTY()
UObject* MyObject;

이처럼 UObject 기반 클래스는 단순히 new해서 쓰는 것이 아니라, 항상 NewObject<>() 또는 CreateDefaultSubobject<>() 등을 통해 생성하고, 반드시 UPROPERTY()로 선언하여 GC가 제대로 추적할 수 있도록 해야 한다.

'Unreal 5 > Study' 카테고리의 다른 글

[Unreal 5] 언리얼 엔진의 Map 컨테이너(TMap, TSet)  (2) 2025.07.21
[Unreal 5] 모듈 API 지정자  (0) 2025.03.12
2. [Unreal 5 / C++] 2D 절차적 맵 생성 알고리즘 (미로 생성 알고리즘)  (0) 2025.03.07
1. [Unreal 5 / C++] 2D 절차적 맵 생성 알고리즘 (미로 생성 알고리즘)  (0) 2025.02.21
[Unreal 5 / C++] 3. Pawn 클래스로 3D 캐릭터 만들기 - 이동 및 비행체  (0) 2025.01.31
'Unreal 5/Study' 카테고리의 다른 글
  • [Unreal 5] 언리얼 엔진의 Map 컨테이너(TMap, TSet)
  • [Unreal 5] 모듈 API 지정자
  • 2. [Unreal 5 / C++] 2D 절차적 맵 생성 알고리즘 (미로 생성 알고리즘)
  • 1. [Unreal 5 / C++] 2D 절차적 맵 생성 알고리즘 (미로 생성 알고리즘)
돼지표
돼지표
https://github.com/wkdgns135
  • 돼지표
    돼지표 개발 스토리
    돼지표
  • 전체
    오늘
    어제
    • 분류 전체보기 (106)
      • C++ (60)
        • Coding Test (53)
        • Study (1)
      • Python (1)
      • Machine Learning (2)
      • Computer Graphics (4)
        • Curly Hair Simulation (2)
      • GPU Programming (11)
        • CUDA basic (7)
        • CUDA fluidsGL (4)
      • Unreal 5 (21)
        • Troubleshooting (4)
        • FPS Shooting (5)
        • Study (10)
        • EOS (1)
      • Computer Science (7)
        • Algorithm (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    unreal 5
    CUDA
    Rendering Pipeline
    C++
    GPU Programming
    그래프 탐색
    아이작 맵 생성
    FPS
    dp
    자료 구조
    Fluid Simulation
    BFS
    정렬
    CS
    구현
    OpenGL
    Algorithm
    수학
    위상 정렬
    UE5
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
돼지표
[Unreal 5] 언리얼 엔진의 가비지 컬렉션(Garbage Collection, GC)
상단으로

티스토리툴바