언리얼/언리얼 학습

Delegate (델리게이트)

코드망령 2026. 6. 1. 15:17

Delegate (델리게이트)

함수(이벤트)를 저장하고 나중에 호출할 수 있는 객체

함수 포인터를 더 안전하고 편리하게 사용할 수 있도록 만든 언리얼의 이벤트 시스템이다.


왜 사용하는가?

객체끼리 직접 의존하지 않고

특정 이벤트가 발생했을 때 원하는 함수를 실행할 수 있다.

예를 들어

몬스터 사망
    ↓
경험치 지급
    ↓
UI 갱신
    ↓
퀘스트 진행도 증가

몬스터가 직접 모든 시스템을 알 필요가 없다.

델리게이트에 등록된 함수들을 호출하기만 하면 된다.


기본 개념

이벤트 발생
      ↓
Delegate 실행
      ↓
등록된 함수 호출

일반 함수 호출

Player->TakeDamage(10);

특정 객체를 알아야 호출 가능


Delegate 사용

OnPlayerDamaged.Broadcast(10);

누가 듣고 있는지 몰라도 됨

등록된 함수들이 자동 실행됨


싱글캐스트 Delegate

하나의 함수만 등록 가능

DECLARE_DELEGATE(FOnAttack);

바인딩

FOnAttack OnAttack;

OnAttack.BindUObject(
    this,
    &AMyCharacter::Attack
);

실행

OnAttack.Execute();

안전 실행

OnAttack.ExecuteIfBound();

바인딩 여부 확인 후 실행


파라미터 전달

DECLARE_DELEGATE_OneParam(
    FOnDamage,
    float
);

바인딩

OnDamage.BindUObject(
    this,
    &AMyCharacter::TakeDamage
);

실행

OnDamage.Execute(50.f);

멀티캐스트 Delegate

여러 함수 등록 가능

DECLARE_MULTICAST_DELEGATE(FOnBossDead);

등록

OnBossDead.AddUObject(
    this,
    &UMyUI::ShowClearUI
);

OnBossDead.AddUObject(
    this,
    &UQuestManager::CompleteQuest
);

실행

OnBossDead.Broadcast();

결과

ShowClearUI()
CompleteQuest()

둘 다 실행됨


Dynamic Delegate

블루프린트에서도 사용 가능


선언

DECLARE_DYNAMIC_MULTICAST_DELEGATE(
    FOnLevelUp
);

프로퍼티 등록

UPROPERTY(BlueprintAssignable)
FOnLevelUp OnLevelUp;

실행

OnLevelUp.Broadcast();

블루프린트

Bind Event
      ↓
Event 실행

가능


언리얼에서 자주 보는 예시

버튼 클릭

Button->OnClicked.AddDynamic(
    this,
    &UMyWidget::OnButtonClicked
);

오버랩

Sphere->OnComponentBeginOverlap

세션 생성 완료

CreateSessionCompleteDelegate

애님 몽타주 종료

MontageEndedDelegate

Delegate 종류

종류 함수 개수 블루프린트 사용
Delegate 1개 X
Multicast Delegate 여러 개 X
Dynamic Delegate 1개 O
Dynamic Multicast Delegate 여러 개 O

자주 사용하는 함수

BindUObject

함수 등록

Delegate.BindUObject(
    this,
    &AMyClass::Func
);

AddUObject

멀티캐스트 등록

Delegate.AddUObject(
    this,
    &AMyClass::Func
);

AddDynamic

블루프린트용 등록

Delegate.AddDynamic(
    this,
    &AMyClass::Func
);

Execute

실행

Delegate.Execute();

ExecuteIfBound

등록 여부 확인 후 실행

Delegate.ExecuteIfBound();

Broadcast

멀티캐스트 실행

Delegate.Broadcast();

실제 사용 예시

플레이어 사망

Player
    ↓
OnPlayerDead.Broadcast()

듣고 있는 객체

UI
GameMode
QuestManager
SoundManager

결과

UI 사망창 출력
게임 종료 체크
퀘스트 진행
사운드 재생

장점

  • 객체 간 결합도 감소
  • 이벤트 기반 프로그래밍 가능
  • 여러 시스템 동시 처리 가능
  • 코드 재사용성 증가
  • 블루프린트 연동 가능

요약

Delegate = 함수 저장소

Bind/Add = 함수 등록

Execute/Broadcast = 함수 실행

즉,

"어떤 일이 발생했을 때 등록된 함수들을 호출하는 언리얼 이벤트 시스템"
이다.

'언리얼 > 언리얼 학습' 카테고리의 다른 글

FOnlineSessionSettings  (0) 2026.06.03
FInputModeUIOnly  (0) 2026.06.02
GameInstance  (0) 2026.06.01
GameMode  (1) 2026.06.01