언리얼엔진5 공부

델리게이트

Client Side 2025. 11. 24. 22:55
  • 델리게이트의 개념
    • 델리게이트는 한마디로 어떤 일이 발생했을 때, 그 일을 처리할 여러 함수들을 미리 등록해두고, 일이 발생하면 등록된 함수들이 알아서 실행되도록 하는 시스템.
    • 발행 - 구독 패턴
      • 발행자와 구독자, 그 사이에 중개인이 있는 패턴.
      • 발행자와 구독자는 서로를 몰라도 중개인을 통해 컨텐츠를 생산하고 소비할 수 있음.
    • 언리얼에서의 발행 - 구독 패턴
      • 델리게이트는 발행자를 위한 Broadcast() 함수와 구독자를 위한 Add() 함수를 제공한다. 컨텐츠를 구독하기 위해 구독자는 Add() 함수를 호출하고, 컨텐츠가 생산되면 발행자는 Breadcast() 함수를 호출한다.
    • 언리얼 델리게이트 선언 매크로
      • DECLARE_{델리게이트 유형}DELEGATE{바인드 될 함수 명세} (…)
  • 델리게이트의 필요성
    • 느슨한 결합(Loose Coupling)
      • 델리게이트가 없다면 A라는 객체에서 B라는 객체의 함수를 직접 호출해야 하는 상황이 많이 생긴다. 그렇게 되면 A는 B가 어떻게 생겼는지, 어떤 함수를 가지고 있는지 다 알아야 하고, B가 바뀌면 A도 같이 수정해야 하는 일이 벌어진다. 이게 바로 강한 결합(Tight Coupling)인데, 이렇게 되면 코드 유지보수가 너무 어려워진다.
      • 하지만 델리게이트를 사용하면 A 객체는 B 객체를 몰라도 된다. 그저 특정 이벤트가 발생하면 호출될 함수를 델리게이트에 등록만 하면 된다. A 객체는 델리게이트를 통해 이벤트를 ‘브로드캐스트’하기만 하면, 델리게이트에 등록된 B의 함수가 자동으로 호출된다.
  • 델리게이트의 장점
    • 유연성
      • 객체들이 서로의 존재를 몰라도 소통할 수 있다.
    • 재사용성
      • 델리게이트를 통해 이벤트를 발생시키면, 이 이벤트에 반응하는 여러 다른 시스템을 쉽게 추가하거나 제거할 수 있다.
    • 확장성
      • 새로운 기능을 추가할 때 기존 코드를 거의 건드리지 않고, 새로운 함수를 델리게이트에 바인딩(등록)하기만 하면 된다.
    • 이벤트 기반 프로그래밍
      • 게임에서 흔히 발생하는 ‘캐릭터가 데미지를 받았다’, ‘문이 열렸다’, ‘UI 버튼이 클릭됐다’ 같은 이벤트를 처리하는 데 아주 탁월하다.
  • 델리게이트의 종류
    • 싱글캐스트 델리게이트 (Single-Cast Deligate)
      • 딱 하나의 함수만 바인딩 가능. 1:1 채팅과 같은 느낌.
      • DECLARE_DELEGATE
    • 멀티캐스트 델리게이트 (Multi-Cast Delegate)
      • 여러 개의 함수 바인딩 가능. 하나의 이벤트에 여러 객체가 반응해야 할 때. 그룹 채팅이나 단체 알림과 같은 느낌,..
      • DECLARE_MULTICAST_DELEGATE
    • 다이내믹 델리게이트 (Dynamic Delegate)
      • C++ 뿐만 아니라 블루프린트 객체와도 바인딩이 가능하며, 직렬화가 가능해서 저장하고 로드할 수 있다.
      • 블루프린트와의 연동 때문에 일반 델리게이트보다 약간 느릴 수 있지만, 편리함이 커서 많이 사용한다.
      • 싱글캐스트와 멀티캐스트 두 종류가 있다
        • Dynamic Single-Cast Delegate : DECLARE_DYNAMIC_DELEGATE
        • Dynamic Multi-Cast Delegate : DECLARE_DYNAMIC_MULTICAST_DELEGAT
  • 델리게이트 사용 방법
    1. 델리게이트 선언 : 어떤 형태의 함수를 받을지 정해주는 과정.
    2. 델리게이트 변수 선언 : 선언된 델리게이트 타입을 사용하는 변수를 만든다.
    3. 바인딩 : 델리게이트 변수에 함수를 ‘구독’시키는 과정. 다양한 바인딩 함수가 있다.
    4. 실행 : 델리게이트에 등록된 함수들을 ‘호출’하는 과정. 싱글캐스트는 Execute(), ExcuteIfBound(). 멀티캐스트는 Broadcast()를 사용한다.

'언리얼엔진5 공부' 카테고리의 다른 글

채팅 프로젝트 생성  (0) 2025.11.27
Unreal Garbage Collection  (0) 2025.11.25
숫자야구_숫자 로직  (0) 2025.11.21
Property Replication  (1) 2025.11.20
RPC(Remote Procedure Call)  (0) 2025.11.19