언리얼 델리게이트(Delegate)
- 언리얼 엔진은 발행 구독 패턴 구현을 위해 델리게이트 기능을 제공함.
- 델리게이트의 사전적 의미는 대리자.
- 학사정보의 구독과 알림을 대리해주는 객체
- 시나리오 구현을 위한 설계
- 학사 정보는 구독과 알림을 대행할 델리게이트를 선언.
- 학생은 학사 정보의 델리게이트를 통해 알림을 구독.
- 학사 정보는 내용 변경시 델리게이트를 사용해 등록한 학생들에게 알림.

언리얼 델리게이트의 선언
언리얼 델리게이트 선언 시 고려사항
- 델리게이트를 설계하기 위한 고려 사항
- 어떤 데이터를 전달하고 받을 것인가? 인자의 수와 각각의 타입을 설계
- 몇 개의 인자를 전달할 것인가?
- 어떤 방식으로 전달할 것인가?
- 일대일로 전달
- 일대다로 전달
- 프로그래밍 환경 설정
- C++ 프로그래밍에서만 사용할 것인가?
- UFUNCTION으로 지정된 블루프린트 함수와 사용할 것인가?
- 어떤 함수와 연결할 것인가?
- 클래스 외부에 설계된 C++ 함수와 연결
- 전역에 설계된 정적 함수와 연결
- 언리얼 오브젝트의 멤버 함수와 연결 ( 대부분의 경우에 이 방식을 사용)
- 어떤 데이터를 전달하고 받을 것인가? 인자의 수와 각각의 타입을 설계
델리게이트의 유형

코드 예시
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "CourseInfo.generated.h"
// Declare Delegate
DECLARE_MULTICAST_DELEGATE_TwoParams(FCourseInfoOnChanged, const FString&, const FString&);//리턴값이 없는 형.
//DECLARE_MULTICAST_DELEGATE_RetVal_TwoParams()//리턴값이 있는 형.
/**
*
*/
UCLASS()
class UNREALDELEGATE_API UCourseInfo : public UObject
{
GENERATED_BODY()
public:
UCourseInfo();
FCourseInfoOnChanged OnChanged;
void ChangeCourseInfo(const FString& InSchoolName, const FString& InNewContents);
private:
UPROPERTY()
FString Contents;
};
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyGameInstance.h"//본인 클래스의 헤더는 항상 제일 먼저 와야 한다.
#include "Teacher.h"
#include "Student.h"
#include "Staff.h"
#include "Card.h"
#include "CourseInfo.h"
UMyGameInstance::UMyGameInstance()
{
//기본 값 설정.
//CDO(Class Default Object).언리얼에 있는 독특한 기능
//템플릿 클래스 객체로 생성이 된다.
SchoolName = TEXT("스쿨");
}
void UMyGameInstance::Init()
{
Super::Init();
UE_LOG(LogTemp, Log, TEXT("======================================="));
//학사 정보 객체 생성.
CourseInfo = NewObject<UCourseInfo>(this);
//학생 객체 생성.
UStudent* Student1 = NewObject<UStudent>();
Student1->SetName(TEXT("학생 1"));
UStudent* Student2 = NewObject<UStudent>();
Student2->SetName(TEXT("학생 2"));
UStudent* Student3 = NewObject<UStudent>();
Student3->SetName(TEXT("학생 3"));
//구독할 함수 등록.
CourseInfo->OnChanged.AddUObject(Student1, &UStudent::GetNotification);
CourseInfo->OnChanged.AddUObject(Student2, &UStudent::GetNotification);
CourseInfo->OnChanged.AddUObject(Student3, &UStudent::GetNotification);
//발행.
CourseInfo->ChangeCourseInfo(SchoolName, TEXT("새로운 학사 정보"));
UE_LOG(LogTemp, Log, TEXT("======================================="));
}'언리얼 엔진 공부 > 언리얼C++' 카테고리의 다른 글
| 어설션(Assertion) (0) | 2025.04.08 |
|---|---|
| 직렬화 (2) | 2025.04.08 |
| 컴포지션 (0) | 2025.04.03 |
| 인터페이스 (1) | 2025.04.02 |
| 언리얼 오브젝트 리플렉션 시스템 (0) | 2025.04.01 |