[UE5] UObject와 C++ 객체 초기화 차이점

ChangJin·2024년 10월 16일
0

Unreal Engine5

목록 보기
104/114
post-thumbnail

언리얼 엔진에서 객체를 초기화하는 방법에는 두 가지 주요 방식이 있습니다. 하나는 UObject 기반 클래스를 사용하여 언리얼의 가비지 컬렉션 시스템을 활용하는 NewObject 방식이고, 다른 하나는 전통적인 C++ 클래스에서 메모리를 직접 관리하는 new 방식입니다.


UObject 초기화 (NewObject)

NewObject는 언리얼 엔진에서 제공하는 함수로, 엔진의 가비지 컬렉션 시스템과 연동된 객체를 생성하는 데 사용됩니다. 이렇게 생성된 객체는 언리얼 엔진의 메모리 관리 시스템에 의해 자동으로 처리되므로, 메모리 해제에 대한 고민을 덜 수 있습니다.

  • 장점:

    • 언리얼의 다양한 시스템과 쉽게 통합할 수 있습니다. 예를 들어, 블루프린트나 리플렉션 시스템에 바로 노출될 수 있습니다.
    • 가비지 컬렉션 시스템이 메모리 관리를 자동으로 처리해 주기 때문에 개발자가 메모리 해제를 따로 신경 쓸 필요가 없습니다.
  • 단점:

    • 일반 new 키워드로 생성하는 것보다 상대적으로 느릴 수 있습니다. 이는 가비지 컬렉션 시스템에 의한 오버헤드 때문입니다.
    • 모든 경우에 UObject를 사용할 필요는 없는데, 불필요하게 사용할 경우 메모리 관리 비용이 증가할 수 있습니다.

전통적인 C++ 클래스 초기화 (new)

표준 C++ 방식으로 객체를 생성하고 수동으로 메모리를 관리하는 방식입니다. 개발자가 객체 생성 및 해제를 명시적으로 관리해야 합니다.

  • 장점:

    • 메모리 관리가 보다 직접적이고 효율적일 수 있습니다. 특히 성능이 중요한 코드에서는 불필요한 오버헤드 없이 객체를 관리할 수 있습니다.
    • 필요에 따라 메모리 해제 시점을 명확하게 제어할 수 있습니다.
  • 단점:

    • 수동으로 메모리를 해제해야 하기 때문에 메모리 누수의 위험이 존재합니다.
    • 언리얼 엔진의 여러 시스템과 바로 연결되지 않기 때문에, UObject가 요구되는 상황에서는 사용할 수 없습니다.

언제 어느 것을 선택해야 할까?

두 방식 모두 나름의 강점과 약점을 가지고 있으므로, 상황에 맞게 선택하는 것이 중요합니다.

  • UObject를 사용해야 할 때:

    • 객체가 블루프린트나 리플렉션을 통해 접근되어야 하거나, 엔진의 다른 시스템(레벨 스트리밍, 애니메이션 시스템 등)과 밀접하게 연관되어 있을 때는 UObject가 적합합니다. 이 경우 NewObject로 생성된 객체는 엔진의 가비지 컬렉션에 의해 안전하게 관리되며, 불필요한 메모리 누수를 방지할 수 있습니다.
  • new를 사용해야 할 때:

    • 성능이 중요한 코드를 작성할 때, 객체가 엔진의 다른 시스템과 연관되지 않고 수동으로 메모리를 관리해도 문제가 없을 때는 new를 사용하는 것이 좋습니다. 이를 통해 성능을 최적화할 수 있고, 불필요한 시스템 오버헤드를 줄일 수 있습니다.

이렇게 해서 UObject와 일반 C++ 객체 초기화 방식의 차이점, 각각의 장단점에 대해 정리해보았습니다. 각 방식이 언제 적합한지에 대한 이해는 언리얼 엔진 개발에 있어 중요한 부분이므로, 여러분의 프로젝트에 맞게 적절히 선택하는 것이 중요합니다.

profile
게임 프로그래머

0개의 댓글