- 델리게이트의 개념
- 델리게이트는 한마디로 어떤 일이 발생했을 때, 그 일을 처리할 여러 함수들을 미리 등록해두고, 일이 발생하면 등록된 함수들이 알아서 실행되도록 하는 시스템.
- 발행 - 구독 패턴
- 발행자와 구독자, 그 사이에 중개인이 있는 패턴.
- 발행자와 구독자는 서로를 몰라도 중개인을 통해 컨텐츠를 생산하고 소비할 수 있음.
- 언리얼에서의 발행 - 구독 패턴
- 델리게이트는 발행자를 위한 Broadcast() 함수와 구독자를 위한 Add() 함수를 제공한다. 컨텐츠를 구독하기 위해 구독자는 Add() 함수를 호출하고, 컨텐츠가 생산되면 발행자는 Breadcast() 함수를 호출한다.
- 언리얼 델리게이트 선언 매크로
- DECLARE_{델리게이트 유형}DELEGATE{바인드 될 함수 명세} (…)
- 델리게이트의 필요성
- 느슨한 결합(Loose Coupling)
- 델리게이트가 없다면 A라는 객체에서 B라는 객체의 함수를 직접 호출해야 하는 상황이 많이 생긴다. 그렇게 되면 A는 B가 어떻게 생겼는지, 어떤 함수를 가지고 있는지 다 알아야 하고, B가 바뀌면 A도 같이 수정해야 하는 일이 벌어진다. 이게 바로 강한 결합(Tight Coupling)인데, 이렇게 되면 코드 유지보수가 너무 어려워진다.
- 하지만 델리게이트를 사용하면 A 객체는 B 객체를 몰라도 된다. 그저 특정 이벤트가 발생하면 호출될 함수를 델리게이트에 등록만 하면 된다. A 객체는 델리게이트를 통해 이벤트를 ‘브로드캐스트’하기만 하면, 델리게이트에 등록된 B의 함수가 자동으로 호출된다.
- 느슨한 결합(Loose Coupling)
- 델리게이트의 장점
- 유연성
- 객체들이 서로의 존재를 몰라도 소통할 수 있다.
- 재사용성
- 델리게이트를 통해 이벤트를 발생시키면, 이 이벤트에 반응하는 여러 다른 시스템을 쉽게 추가하거나 제거할 수 있다.
- 확장성
- 새로운 기능을 추가할 때 기존 코드를 거의 건드리지 않고, 새로운 함수를 델리게이트에 바인딩(등록)하기만 하면 된다.
- 이벤트 기반 프로그래밍
- 게임에서 흔히 발생하는 ‘캐릭터가 데미지를 받았다’, ‘문이 열렸다’, ‘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
- 싱글캐스트 델리게이트 (Single-Cast Deligate)
- 델리게이트 사용 방법
- 델리게이트 선언 : 어떤 형태의 함수를 받을지 정해주는 과정.
- 델리게이트 변수 선언 : 선언된 델리게이트 타입을 사용하는 변수를 만든다.
- 바인딩 : 델리게이트 변수에 함수를 ‘구독’시키는 과정. 다양한 바인딩 함수가 있다.
- 실행 : 델리게이트에 등록된 함수들을 ‘호출’하는 과정. 싱글캐스트는 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 |