강한 결합은 클래스들이 서로 의존성을 가지는 경우.
느슨한 결합은 실물에 의존하지 말고 추상적 설계에 의존하는 방식.
이렇게 하면, 나중에 기능 수정이 필요할때 Interface만 손보면 된다.
Broadcast
바인딩 부분
실행 부분
이 디자인 패턴에는 콘텐츠 제작자
, 발행자
, 구독자
3명의 주체가 있다.
콘텐츠 제작자
: 인자 개수와 전달할 객체의 수를 고려해 델리게이트를 선언 + Broadcast을 실시하는 함수 정의
발행자
: 콘텐츠 제작자
헤더를 include하고 콘텐츠 제작자
타입의 포인터 선언. AddUObject
나 AddDynamic
으로 어떤 객체의 어떤 함수를 Delegate에 바인딩 할지 정한다. + Braodcast 함수 실행하기. 바인딩이란, Delegate에 (누구 + 어떤 함수)를 푸시 알람 설정하는 것과 같다. 발행자
는 콘텐츠 제작자
와 구독자
두 명의 헤더를 다 참조하지만 콘텐츠 제작자
와 구독자
끼리는 서로 헤더를 참조하지 않는것이 뽀인트
구독자
: 바인딩 시킬 함수의 구현. 발행자
에서 구독자
헤더를 참조해 이 함수 정보를 가져오고 바인딩을 함으로
Delegate가 동작하기 위해서는 3가지 주체, 콘텐츠 제작자
- 발행자
- 구독자
가 있다는 것을 생각. 각 주체에서는 뭐를 담당해야 하는지를 생각해야 한다.
여기서 중요한 점은 제작자와 구독자는 서로 몰라도, 발행자를 통해 콘텐츠를 생산하고 전달할 수 있다. <- 느슨한 결합
델리게이트의 선언은 콘텐츠 제작자 클래스에 보통 하고, 또 한 가지 명심해야 할 부분은 콘텐츠 제작자의 헤더와 발행자의 헤더가 서로 참조되지 않게 유의하자.
Delegate 선언시 Delegate 유형
과 함수 정보
를 꼭 생각해주어야 한다. Delegate 선언 매크로는 DECLARE_{Delegate 유형
}DELEGATE{함수 정보
}로 결정된다.
Delegate 유형
: 어떤 유형의 Delegate인지 구상한다. 이미 언리얼에서는 각 상황에 대한 다양한 선언 Macro를 만들어 주었다.
일대일 형태로 C++만 지원한다면 유형은 공란으로 둔다. => DECLARE_DELEGATE 사용
일대일 형태로 C++만 지원한다면 MULTICAST를 선언한다. => DECLARE_MULTICAST 사용
일대일 형태로 블루프린트를 지원한다면 DYNAMIC을 선언한다. => DECLARE_DYNAMIC 사용
일대다 형태로 블루프린트를 지원한다면 DYNAMIC과 MULTICAST를 조합한다. =>
DECLARE_DYNAMIC_MULTICAST 사용
함수 정보
: 연동될 함수 형태를 지정한다.
인자가 없고 반환값도 없으면 공란으로 둔다. => DECLARE_DELEGATE 사용
인자가 하나고 반환값이 없으면 OneParam으로 지정한다. => DECLARE_DELEGATE_OneParam 사용
인자가 3개고 반환값이 있으면 RetVal_ThreeParams로 지정한다. => DECLARE_DELEGATE_RetVal_ThreeParams 사용 (MULTICAST는 반환값을 지원하지 않는다.)
최대 9개까지 지원함
언리얼 델리게이트 공식 문서 [링크]