본문으로 건너뛰기
Unreal Engine C++ 기초집LESSON 10

변수와 참조 안전성

난이도초급
예상 시간40분
선수지식9강의 입력 클래스

10강. 변수와 참조 안전성

1. 이번 강의에서 해결할 문제

Actor 포인터가 갑자기 유효하지 않거나, 클래스와 인스턴스를 혼동해 SpawnActor 호출이 실패합니다. Unreal이 관리하는 UObject 참조와 짧게 사용하는 raw pointer를 구분합니다.

2. 학습 목표

3. 핵심 개념

UObject와 Actor는 delete로 직접 제거하지 않습니다. Actor는 Destroy를 요청하고, UObject 메모리는 엔진의 Garbage Collection이 정리합니다. GC가 살아 있는 참조로 인식해야 하는 UCLASS 멤버는 UPROPERTY로 표시된 TObjectPtr를 기본 선택으로 삼습니다.

Raw pointer가 항상 위험하거나 금지되는 것은 아닙니다. 함수 매개변수, 반환값을 즉시 검사하는 지역 변수처럼 짧게 쓰는 T*는 자연스럽습니다. 오래 보관하지만 대상이 없어질 수 있는 비소유 캐시는 TWeakObjectPtr, 비동기 로딩 자산은 TSoftObjectPtr 같은 목적별 타입을 검토합니다. 공식 Object Pointers 문서의 현재 엔진 버전 표를 확인하세요.

4. 단계별 실습

파일 경로: Source/TopDownSurvival/Systems/EnemySpawner.h · 참조 필드

EnemySpawner.h · 핵심 부분
class AEnemyBase;
class USceneComponent;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
TObjectPtr<USceneComponent> SceneRoot;

UPROPERTY(EditDefaultsOnly, Category = "Spawning")
TSubclassOf<AEnemyBase> EnemyClass;

UPROPERTY()
TObjectPtr<AEnemyBase> LastSpawnedEnemy;

파일 경로: Source/TopDownSurvival/Systems/EnemySpawner.cpp · 사용 예

EnemySpawner.cpp · 참조 검사
void AEnemySpawner::InspectPlayer()
{
APlayerController* PlayerController =
GetWorld() ? GetWorld()->GetFirstPlayerController() : nullptr;
APawn* PlayerPawn = PlayerController ? PlayerController->GetPawn() : nullptr;
if (!IsValid(PlayerPawn))
{
UE_LOG(LogTemp, Warning, TEXT("Player Pawn is not ready"));
return;
}

UE_LOG(LogTemp, Display, TEXT("Player: %s"), *PlayerPawn->GetName());
}

TSubclassOf는 EnemyBase 객체가 아니라 EnemyBase 또는 자식 클래스의 UClass를 담습니다. 실제 인스턴스는 15강에서 SpawnActor로 만듭니다.

5. 코드가 동작하는 이유

TObjectPtr는 UPROPERTY 필드에서 강한 UObject 참조를 표현하며 직렬화와 GC 추적에 참여합니다. 지역 raw pointer는 함수 실행 중에만 사용하고 IsValid 또는 null 검사를 거쳐 접근합니다. TSubclassOf는 에디터 클래스 선택 범위를 AEnemyBase 계층으로 제한해 잘못된 클래스 지정 가능성을 줄입니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

변수와 참조 안전성 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“변수와 참조 안전성” 실습을 안전하게 진행하기 위한 판단으로 가장 알맞은 것은 무엇인가요?
  2. 문제 2“변수와 참조 안전성” 실습 중 ‘IsValid 검사만으로 영구 안전 보장’ 상황을 발견했습니다. 본문과 일치하는 설명은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

10강. 변수와 참조 안전성 미완료 상태