가비지 컬렉션과 메모리 관리

2025. 1. 31. 21:20·내배캠/Unreal Engine
목차
  1. 📌 캐릭터 스폰과 메모리 관리 메커니즘
  2. 📌 UCLASS와 리플렉션 시스템의 관계
  3. 📌 동적 메모리 관리의 주의점
  4. 📌 가비지 컬렉션의 동작 과정
언리얼 엔진에서 디폴트 폰(Default Pawn)을 게임 모드에 등록하면 게임 시작 시 자동으로 캐릭터가 스폰된다. 이때 메모리 관리와 가비지 컬렉션(GC)이 어떻게 이루어지는지 정리한다.

📌 캐릭터 스폰과 메모리 관리 메커니즘

  1. 캐릭터 스폰 과정
    • 게임 모드의 DefaultPawnClass에 지정된 캐릭터 클래스는 APlayerController가 시작될 때 SpawnDefaultPawnFor() 메서드를 호출하여 자동으로 스폰된다.
    • 스폰된 캐릭터는 월드에 소유된 상태로 관리된다.
  2. 메모리 관리 방식
    • 언리얼 엔진은 가비지 컬렉션 시스템을 사용하여 메모리를 관리한다.
    • 모든 UObject 기반 클래스(예: AActor, UActorComponent)는 GC의 관리 대상이다.
    • GC는 일정 주기마다 참조되지 않는 객체들을 정리하여 메모리 누수를 방지한다.
  3. 게임 종료 시 메모리 해제
    • 게임이 종료되거나 맵이 언로드될 때 월드에 속한 모든 액터가 GC의 대상이 되어 메모리가 자동 해제된다.
  4. 유니크 포인터 사용 여부
    • 언리얼 엔진은 C++ 표준의 std::unique_ptr이나 std::shared_ptr 대신 자체 스마트 포인터(TWeakObjectPtr, TStrongObjectPtr, TSharedPtr)와 GC를 사용하여 메모리를 관리한다.

📌 UCLASS와 리플렉션 시스템의 관계

  1. UCLASS 매크로와 GC
    • UCLASS()로 선언된 객체는 언리얼의 리플렉션 시스템에 등록되며, 이를 통해 GC의 관리 대상이 된다.
    • 리플렉션 시스템은 객체의 클래스 정보, 속성, 메서드 등을 관리하고 GC가 객체 참조 상태를 추적할 수 있도록 한다.
  2. GC 대상 객체의 조건
    • UCLASS() 매크로로 선언된 UObject 기반 클래스여야 한다.
    • 리플렉션 시스템에 등록되지 않은 순수 C++ 객체는 GC의 관리 대상이 아니며 명시적으로 메모리를 해제해야 한다.

📌 동적 메모리 관리의 주의점

  1. UObject 내부의 동적 메모리
    • UObject 기반 클래스 내부의 원시 포인터(int*, float*)나 동적 배열은 GC가 자동으로 관리하지 않는다.
    • 이런 메모리는 C++ 스타일로 직접 할당 및 해제해야 한다.
  2. 올바른 메모리 관리 방법
    • 원시 포인터 사용 시: new 또는 malloc로 할당한 메모리는 반드시 명시적으로 해제해야 한다.
    • 스마트 포인터 사용: 언리얼의 TUniquePtr이나 TSharedPtr을 사용하면 소멸 시 자동으로 메모리가 해제된다.
      TUniquePtr<int[]> DynamicArray = MakeUnique<int[]>(100);

    • TArray 사용: TArray<UObject*>는 GC가 자동으로 관리한다.
      TArray<UObject*> UObjectArray;


📌 가비지 컬렉션의 동작 과정

  1. 객체 생성: NewObject<UClass>() 또는 SpawnActor()로 생성된 객체는 리플렉션 시스템에 등록된다.
  2. 레퍼런스 추적: GC는 객체의 참조 상태를 추적하여 더 이상 참조되지 않는 객체를 대상으로 한다.
  3. GC 작동: 일정 주기마다 자동으로 작동하거나 명시적으로 CollectGarbage()를 호출하여 메모리를 정리한다.

'내배캠 > Unreal Engine' 카테고리의 다른 글

Game State와 Game Mode  (0) 2025.02.04
캐릭터 데미지 적용  (0) 2025.02.04
Pawn에 Possess 하기  (0) 2025.01.31
데이터 에셋과 데이터 테이블  (0) 2025.01.28
인터페이스 기반 아이템 클래스 구현_2_아이템 스폰 및 레벨 데이터 관리  (0) 2025.01.27
  1. 📌 캐릭터 스폰과 메모리 관리 메커니즘
  2. 📌 UCLASS와 리플렉션 시스템의 관계
  3. 📌 동적 메모리 관리의 주의점
  4. 📌 가비지 컬렉션의 동작 과정
'내배캠/Unreal Engine' 카테고리의 다른 글
  • Game State와 Game Mode
  • 캐릭터 데미지 적용
  • Pawn에 Possess 하기
  • 데이터 에셋과 데이터 테이블
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151)
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16)
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    가비지 컬렉션과 메모리 관리
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.