1-9강 Delegate

Ryan Ham·2024년 7월 12일
0

이득우 Unreal

목록 보기
20/23

강의 목표

  • 느슨한 결합의 장점과 이를 편리하게 구현하도록 도와주는 Delegate의 이해
  • 발행 구독 디자인 패턴의 이해
  • 언리얼 Delegate를 활용한 느슨한 결합의 설계와 구현의 학습

느슨한 결합(Loose Coupling)

강한 결합(Tight Coupling) VS 느슨한 결합(Loose Coupling)

강한 결합은 클래스들이 서로 의존성을 가지는 경우.

느슨한 결합은 실물에 의존하지 말고 추상적 설계에 의존하는 방식.

  • 예를 들어서 어떤 클래스의 생성자에 인스턴스화 된 객체의 정보가 필요한 것을 Interface를 넘겨주면서 의존성을 분리.

이렇게 하면, 나중에 기능 수정이 필요할때 Interface만 손보면 된다.


Delegate 키워드

Broadcast

바인딩 부분

  • AddUObject
  • AddDynamic(어떤 클래스에, 어떤 함수를)

실행 부분

  • ExeceteIfBound <- Delegate 타입이 싱글일때
  • Broadcast <- Delegate 타입이 멀티일때 / Broadcast parameter 안에는 우리가 전달해주고 싶은 값을 넣어준다.

발행 구독 디자인 패턴

이 디자인 패턴에는 콘텐츠 제작자, 발행자, 구독자 3명의 주체가 있다.

  • 콘텐츠 제작자 : 인자 개수와 전달할 객체의 수를 고려해 델리게이트를 선언 + Broadcast을 실시하는 함수 정의

  • 발행자 : 콘텐츠 제작자 헤더를 include하고 콘텐츠 제작자 타입의 포인터 선언. AddUObjectAddDynamic으로 어떤 객체의 어떤 함수를 Delegate에 바인딩 할지 정한다. + Braodcast 함수 실행하기. 바인딩이란, Delegate에 (누구 + 어떤 함수)를 푸시 알람 설정하는 것과 같다. 발행자콘텐츠 제작자구독자 두 명의 헤더를 다 참조하지만 콘텐츠 제작자구독자 끼리는 서로 헤더를 참조하지 않는것이 뽀인트

  • 구독자 : 바인딩 시킬 함수의 구현. 발행자에서 구독자 헤더를 참조해 이 함수 정보를 가져오고 바인딩을 함으로

기억할 것!

Delegate가 동작하기 위해서는 3가지 주체, 콘텐츠 제작자 - 발행자 - 구독자가 있다는 것을 생각. 각 주체에서는 뭐를 담당해야 하는지를 생각해야 한다.

여기서 중요한 점은 제작자와 구독자는 서로 몰라도, 발행자를 통해 콘텐츠를 생산하고 전달할 수 있다. <- 느슨한 결합

델리게이트의 선언은 콘텐츠 제작자 클래스에 보통 하고, 또 한 가지 명심해야 할 부분은 콘텐츠 제작자의 헤더와 발행자의 헤더가 서로 참조되지 않게 유의하자.


언리얼 델리게이트의 선언

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개까지 지원함

profile
🏦KAIST EE | 🏦SNU AI(빅데이터 핀테크 전문가 과정) | 📙CryptoHipsters 저자

0개의 댓글