델리게이트

2023. 9. 3. 19:15·[게임 개발] 언리얼엔진 공부/이득우의 언리얼 프로그래밍 Part.1

강한 결합과 느슨한 결합

  • 강한 결합
    - 클래스들이 서로 의존성을 가지는 경우를 의미한다.
  • 느슨한 결합
    - 실물에 의존하지 말고 추상적 설계에 의존하자(DIP 원칙)
    - 유지 보수를 손쉽게 만들어줌

 


느슨한 결합의 간편한 구현

함수를 오브젝트처럼 관리하면 어떨까?

  1. 함수포인터를 이용한 콜백함수 (C스타일)
    - 가능은 하나 복잡함
    - c++에서 bind와 fuction 활용이 느려 게임에선 쓰기 힘듬

  2. 델리게이트 키워드
    - 함수를 객체처럼 다룸
    - 안정적이고 간편한 선언

발행/구독 디자인  패턴

Push 형태의 알림을 구현하는데 적합한 디자인

간단히 말해서 델리게이트가 자신에 대해서 발행을 시도하면
해당 델리게이트를 구독한 함수가 모두 호출되는 것

 

  • 발행자(Publisher) 와 구독자(Subscriber) 로 구분된다.
    - 컨텐츠 제작자는 컨텐츠를 생산한다.
    - 발행자는 컨텐츠를 배포한다.
    - 구독자는 배포된 컨텐츠를 받아 소비한다.

  • 제작자와 구독자가 서로를 몰라도, 발행자를  통해 컨텐츠를 생산하고
    전달할 수 있다.
  • 제작자와 구독자는 서로를 모르기에 느슨한 결합으로 구성된다.


델리게이트 선언시 고려사항

  • 어떤 데이터를 전달하고 받을것인가? 인자의 수와 각각의 타입을 설계
    - 몇개의 인자로 전달할 것인가?
    - 어떤 방식으로 전달할 것인가?
    - 일대일로 전달할 것인가?
    - 일대다로 전달할 것인가?

  • 프로그래밍 환경 설정
    - C++ 프로그래밍 환경에서만 사용할 것인가?
    - UFUNTION으로 지정된 블루프린트 함수와 사용할 것인가?

  • 어떤 함수와 연결할 것인가?
    - 클래스 외부에 설계된 C++ 함수와 연결
    - 전역에 설계된 정적 함수와 연결
    - 언리얼 오브젝트의 멤버 함수와 연결 (대부분의 경우에 이 방식을 사용)

 


델리게이트 선언 매크로
DECLARE_델리게이트 유형_DELEGATE_함수정보

 

델리게이트 유형

  • 일대일 형태의 C++ : 공란
  • 일대다 형태의 C++ : MULTICAST
  • 일대일 형태의 블루프린트 : DYNAMIC
  • 일대다 형태의 블루프린트 : DYNAMIC_MULTICAST

함수정보

  • 인자가 없고 반환값도 없음 : 공란
  • 인자가 하나고 반환값이 없음 : OneParam
  • 인자가 세개고 반환값이 있음: RetVal_ThreeParams ( 다이나믹만 가능, 멀티캐스트는 지원 X)

 

예시)

- 학사 정보가 변경되면 알림 주체와 내용을 학생에게 전달한다.

-> 두개의 인자를 가진다. TwoParams

 

- 변경된 학사 정보는 다수 인원을 대상으로 발송한다.

-> MULTICAST 사용

 

- 오직 C++ 에서만 사용한다.
-> 다이나믹은 사용하지 않음

 

결과)

DECLARE_MULTICAST_DELEGATE_TwoParams

저작자표시 (새창열림)

'[게임 개발] 언리얼엔진 공부 > 이득우의 언리얼 프로그래밍 Part.1' 카테고리의 다른 글

언리얼 열거형, 컴포지션  (0) 2023.05.24
언리얼 인터페이스  (0) 2023.05.23
언리얼 오브젝트 리플렉션  (0) 2023.05.19
TChar와 FString  (0) 2023.05.17
언리얼의 기본 타입을 따로 지정하는 이유  (0) 2023.05.17
'[게임 개발] 언리얼엔진 공부/이득우의 언리얼 프로그래밍 Part.1' 카테고리의 다른 글
  • 언리얼 열거형, 컴포지션
  • 언리얼 인터페이스
  • 언리얼 오브젝트 리플렉션
  • TChar와 FString
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      메모리구조
      프로세스
      투포인터
      문자열
      스레드
      해시
      dp
      context switching
      누적합
      참조자
      dfs
      슬라이딩 윈도우
      데드락
      우선순위 큐
      브루트포스
      그리디
      역참조
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    델리게이트
    상단으로

    티스토리툴바