1. Actor Component란?
액터(Actor)의 기능을 모듈화하여 재사용할 수 있게 만든 부품입니다. 특정 기능을 액터 클래스에 직접 코딩하는 대신, 컴포넌트로 분리하면 여러 액터에 쉽게 탈부착할 수 있습니다.
- 예시: HealthComponent를 하나 만들면, APolice(경찰), ARobber(도둑), 심지어 파괴 가능한 ADoor(문)에도 동일한 체력 시스템을 적용할 수 있습니다.
2. 왜 사용하는가? (장점)
- 상속의 한계 극복: 상속 구조가 깊어지면 코드가 복잡해지지만, 컴포넌트는 필요한 기능만 '조립'하므로 유연합니다.
- 코드 재사용성: 한 번 잘 만든 컴포넌트는 다른 프로젝트에서도 그대로 사용 가능합니다.
- 단일 책임 원칙(SRP): 액터 클래스는 흐름을 제어하고, 상세 로직은 컴포넌트가 담당하여 코드가 깔끔해집니다.
3. C++ 구현 예시
멀티플레이어 게임 'Cop and Robber'에서 사용할 수 있는 간단한 CombatComponent 구조입니다.
Header (.h)
// UActorComponent를 상속받는 클래스
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class AFO_API UCombatComponent : public UActorComponent
{
GENERATED_BODY()
public:
UCombatComponent();
protected:
// 데미지 수치 (UPROPERTY로 에디터 노출)
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Combat")
float AttackDamage;
// 실무에서 중요한 '방어적 코드': nullptr 체크 후 사용
void Attack(AActor* Target);
};
Source (.cpp)
void UCombatComponent::Attack(AActor* Target)
{
// Pointer Validation (안전성 확보)
if (Target && GetOwner())
{
UE_LOG(LogTemp, Log, TEXT("%s가 %s를 공격합니다!"), *GetOwner()->GetName(), *Target->GetName());
// 실제 데미지 로직...
}
}
4. 취업을 위한 실무 포인트
- 컴포넌트 리플리케이션: 컴포넌트 내부의 변수도 리플리케이션이 가능합니다. SetIsReplicatedByDefault(true)를 생성자에서 호출해야 합니다.
- 최적화 (Tick): 컴포넌트가 굳이 매 프레임 계산할 필요가 없다면 PrimaryComponentTick.bCanEverTick = false;로 설정하여 성능을 확보하는 습관이 중요합니다.
- 의존성 분리: 컴포넌트가 소유자(Owner)가 누구인지 너무 자세히 알게 하지 마세요. 인터페이스(Interface)를 통해 소통하는 것이 훨씬 고급 기술입니다.
'언리얼엔진5 공부' 카테고리의 다른 글
| 리팩터링 (Refactoring) (0) | 2025.12.19 |
|---|---|
| 2025-12-18 TIL: 멀티플레이어 게임 UI 시스템 및 리스폰 로직 구현 (0) | 2025.12.18 |
| 언리얼엔진 멀티플레이어 디버깅 : AttributeComponent 호출 시점 문제 (1) | 2025.12.16 |
| [UE5] Property Replication vs RPC (0) | 2025.12.10 |
| [UE5] RepNotify vs Delegate (0) | 2025.12.09 |