unreal 에서 델리게이트는 약한 관계를 유지하기 위해 사용. A에서 B의 함수들을 호출할때 delegate가 없으면 강한 관계로 호출해야 한다. (B포인터를 가져와서 호출).( ex: B->callFunc() 같은 방식
) (B에 대해 헤드파일을 가져와서 "알게 되고" 포인로 참조하여 함수를 호출했기 때문에 "강한관계" 라고 볼수밖에 없다. 이런식으로 C,D,E에 대해 함수들을 호출하려면 헤더파일을 다 임포트해야 된고 참조를 다 가져와야 하기때문에 코드의 수정도 어렵다. 반면 DELEGATE로 호출하는 경우에는 A에서 델리게이트를 선언한후 해당 델리게이트를 변수로 가지고 있으면 EX:
A헤더:
선언: DECLARE_DELEGATE(FDele_Single); (클래스 외부)
클래스 내부에서 변수를 킵하는 부분: FDele_Single Fuc_DeleSingle; (클래스 내부)
B클래스에서는 A의 델리게이트에 B클래스의 함수를 등록하면 된다.
예: A->Fuc_DeleSingle.BindUFunction(this, FName("CallDeleFunc_Single"))
B는 A에 대해 알고있어야 하지만 A는 B에 대해 모르는 상황에서 B의 함수를 호출할수 있게 된다.
C,D,E도 A에 대해서는 알고있어야 하지만 A는 C,D,E를 몰라도 자신이 킵하고있는 델리게이트를 실행시키는 것으로 CDE의 함수를 호출할수 있고 호출시점도 A에서 정할수 있다. 때문에 약한 관계가 유지된다.(어느정도)
호출부분: if(Fuc_DeleSingle.IsBound()==true) Fuc_DeleSingle.Execute();