내일배움캠프/TIL

TIL260522 - Unreal

옆집히드라 2026. 5. 22. 21:04

1. 핵심 개념


  • 언리얼 스마트 포인터
  • MakeShareable vs MakeShared
  • css 식 UI 제어
  • named slot

2. 상세 내용


1.1. 언리얼 스마트 포인터

스마트 포인터 타입 설명
Shared Pointers (TSharedPtr) 레퍼런스 카운터로 오브젝트를 관리한다. 레퍼런스 카운터가 0이 되면 자동으로 해제된다. Shared Pointers를 만들 때 MakeShared를 사용할 수 있다면 MakeShareable을 대신해서 사용하는 것이 낫다.(아래 참조)
Shared References (TSharedRef) 참조한 오브젝트가 null이 불가능한 오브젝트라는 것을 보장하길 원하거나 공유된 오브젝트 소유권을 보여주길 원할 경우에는 쉐어드 레퍼런스를 사용하세요.
Weak Pointers (TWeakPtr) 위크 포인터는 쉐어드 포인터와 비슷하지만 참조하는 오브젝트를 소유하지 않기 때문에 생명 주기에 영향을 주지 않습니다. GC 수거 주의
Unique Pointers (TUniquePtr) 유니크 포인터는 참조하는 오브젝트를 유일하고 명시적으로 소유합니다. 특정 자원에 대해서는 하나의 유니크 포인터만 있을 수 있기 때문에, 유니크 포인터는 소유권을 이전할 수 있지만 공유는 할 수 없습니다. 유니크 포인터를 복사하려 하면 컴파일 오류가 발생합니다. 또한, 유니크 포인터가 스코프(Scope)를 벗어나게 되면, 참조하는 오브젝트가 자동 소멸됩니다.

1.2. 헬퍼 클래스와 함수

  • TSharedFromthis: 여기서 클래스를 파생시키면 AsShared, SharedThis 함수가 추가되는데 이걸로 This(자신에 대한 TSharedRef)를 구할 수 있다. 단 AsShared, SharedThis를 생성자에서 호출하지 말 것(크래시)
  • MakeShared() & MakeShareable(): 일반 c++ 포인터로 쉐어드 포인터를 생성한다. 전자는 한 번의 힙 할당으로 생성이 가능하지만 오브젝트가 public 생성자를 제공해야 한다.
  • StaticCastSharedRef() & StaticCastSharedPtr: 주로 정적 형변환(down cast) 시 사용한다.
  • ConstCastSharedRef() & ConstCastSharedPtr: const 스마트 레퍼런스 또는 스마트 포인터를 mutable 스마트 레퍼런스 또는 스마트 포인터로 각각 변환한다.

3. 질문 및 해결 (Q&A)


  • 왜 공유 포인터는 this로 자신을 참조할 수 없을까?
    • 공유 포인터는 실제 객체를 가리키는 원시 포인터(this), 이 객체를 몇 명이 공유하고 있는지 세는 레퍼런스 카운터(제어 블록)를 메모리로 가지고 있다. 그런데 TSharedPtr(this)를 호출하면 TSharedPtr은 this 자체가 이미 다른 카운터에 의해 관리되는 사실을 알 수 없다. 따라서 this를 관리하기 위한 새로운 레퍼런스 카운터가 생성되는데 이 때문에 독립적인 카운터가 2개가 생기는 문가 발생한다.
      따라서 이 문제를 해결하기 위해 TSharedFromThis는 객체 스스로 자신의 카운터를 추적할 수 있는 TWeakPtr과 유사한 멤버 변수가 추가된다.

4. 관련 문서 (Links)


'내일배움캠프 > TIL' 카테고리의 다른 글

TIL260528 - 챕터2 프로젝트 - 2  (0) 2026.05.28
TIL260526 - CPP  (0) 2026.05.26
TIL260521 - Unreal  (0) 2026.05.21
TIL260518 - VFX  (0) 2026.05.18
TIL260515 - Unreal  (0) 2026.05.15