강한 결합과 느슨한 결합
- 강한 결합
- 클래스들이 서로 의존성을 가지는 경우를 의미한다. - 느슨한 결합
- 실물에 의존하지 말고 추상적 설계에 의존하자(DIP 원칙)
- 유지 보수를 손쉽게 만들어줌
느슨한 결합의 간편한 구현
함수를 오브젝트처럼 관리하면 어떨까?
- 함수포인터를 이용한 콜백함수 (C스타일)
- 가능은 하나 복잡함
- c++에서 bind와 fuction 활용이 느려 게임에선 쓰기 힘듬 - 델리게이트 키워드
- 함수를 객체처럼 다룸
- 안정적이고 간편한 선언
발행/구독 디자인 패턴
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 |