출처:
C#에서 선보인 개념으로, 콜백함수를 등록하기 위한 함수 포인터를
간결한 문법과 안정성으로 사용하기 위해 고안되었다.
델리게이트의 가장 큰 특징은 는 이름 뜻대로, 집단의 의사를 대표한다는 점이다.
이는 델리게이트가 하나의 함수 뿐만 아니라,
동일한 리턴값과 인자를 가지는 여러개의 함수를 관리할 수 있다는 것을 의미한다.
이러한 특징은 C#의 주요 패턴인 발행/구독 패턴의 구현으로 이어지는데,
신문구독처럼, 신문을 받아보겠다는 구독 의사를 밝히고 등록하면,
신문이 발행될 때 마다 동일한 시간에 모든 구독자의 집으로 신문을 배달해 주듯이,
특정 이벤트가 발생하면, 델리게이트에 등록된 모든 함수가 한꺼번에 실행된다.
사용예 1)
플레이어는 미니언을 스폰하는데, 플레이어가 죽으면 모든 미니언도 같이 죽어야 한다.
그럼 플레이어가 죽는 이벤트를 델리게이트로 정의하고, 미니언을 스폰할 때 마다
각 미니언에게 이를 구독하게 설정하면, 플레이어가 죽을 때 명령 하나로
모든 미니언들에게 플레이어가 죽었다고 알려줄 수 있고, 이 알람을 받았을때 미니언들도 죽게 하면 된다.
사용예 2)
어떤 애니메이션이 동작중인지를 매번 체크하는 것보다,
애니메이션이 끝났다고 캐릭터에게 알려주는 방식이 더 낫다
언리얼 델리게이트는 2가지로 나누어진다.
BP 오브젝트는 멤버 함수에 대한 정보를 저장하고 로딩하는 직렬화 매커니즘이 들어있기 때문에,
일반 C++언어가 관리하는 방법으로 멤버함수를 관리할 수 없다.
그래서 BP와 관련된 C++함수는 모두 UFUNCTION매크로를 사용해야 한다.
이렇게 BP객체와도 연동하는 델리게이트를 다이나믹 델리게이트라 한다.
싱글캐스트는 델리게이트변수.BindUFunction(this, FName("함수명")) 형식으로 바인드하며,
멀티캐스트는 델리게이트변수.AddUFunction(this, FName("함수명")) 형식으로 바인드한다.
언리얼에서 델리게이트를 사용하려면 먼저 매크로를 사용해 델리게이트를 선언해야 한다.
델리게이트는 모든 함수 유형을 대변할 수 없고,
우리가 지정한 함수의 리턴값과 인자 타입을 가지는 함수만 대표할 수 있다.
데리게이트를 바인딩 할때, 델리게이트에 등록할 함수의 종류에 따라 호출하는 함수가 달라진다.
언리얼 델리게이트 시스템에 등록 가능한 함수는 다음과 같다.
플레이어가 사망하면, 플레이어가 스폰한 미니언들 모두 죽는 기능 예제이다.
만약 인자가 필요하다면 각 인자의 개수에 맞는 매크로를 사용한다.
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParams()
DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams()