콜백(Callback)이라는 용어는 델리게이트(Delegate)를 사용할 때 주로 쓰이지만, 반드시 델리게이트에 한정되는 것은 아니다.
✅ 콜백은 개념적인 용어
콜백은 단순히 "어떤 이벤트가 발생했을 때 실행될 함수"를 의미하며, 언리얼에서는 델리게이트 외에도 다양한 방식으로 콜백을 구현할 수 있다.
🔥 콜백을 구현하는 다양한 방식
1️⃣ 델리게이트(Delegate)를 이용한 콜백
델리게이트는 콜백을 등록하고 실행하는 가장 일반적인 방법이다.
DECLARE_DELEGATE(FOnAction);
FOnAction OnSomethingHappened;
void SomeFunction()
{
OnSomethingHappened.BindLambda([]() {
UE_LOG(LogTemp, Warning, TEXT("콜백 함수 실행!"));
});
OnSomethingHappened.ExecuteIfBound(); // 콜백 실행
}
✅ 델리게이트를 사용하면 여러 개의 콜백을 등록하고 실행할 수 있다.
2️⃣ 함수 포인터(Function Pointer)를 이용한 콜백
델리게이트 없이도 함수 포인터를 사용하여 직접 콜백을 전달할 수 있다.
typedef void (*CallbackFunc)(); // 콜백 함수 타입 정의
void SomeAction(CallbackFunc Callback)
{
if (Callback)
{
Callback(); // 콜백 실행
}
}
void MyCallbackFunction()
{
UE_LOG(LogTemp, Warning, TEXT("함수 포인터 콜백 실행!"));
}
void Test()
{
SomeAction(&MyCallbackFunction); // 콜백 전달
}
3️⃣ 인터페이스(Interface)를 이용한 콜백
객체 지향적으로 콜백을 구현하려면 인터페이스를 사용할 수도 있다.
// ICallbackInterface.h
class ICallbackInterface
{
public:
virtual void OnEventTriggered() = 0; // 순수 가상 함수 (콜백)
};
// MyActor.h
class AMyActor : public AActor, public ICallbackInterface
{
public:
virtual void OnEventTriggered() override
{
UE_LOG(LogTemp, Warning, TEXT("인터페이스 콜백 실행!"));
}
};
// 다른 클래스에서 호출
void TriggerEvent(ICallbackInterface* CallbackObject)
{
if (CallbackObject)
{
CallbackObject->OnEventTriggered();
}
}