콜백이란?

jelly·2025년 3월 10일

콜백(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();
    }
}
profile
jelly

0개의 댓글