728x90
반응형
델리게이트
C++ 오브젝트 상의 멤버 함수를 가리키고 실행시키는 데이터 유형입니다.
dev.epicgames.com
- 정리
- 언리얼 C++ 델리게이트
- 느슨한 결합(Loose Coupling)이 가지는 장점
- 향후 시스템 변경 사항에 대해 손쉽게 대처할 수 있음
- 느슨한 결합(Loose Coupling)으로 구현된 발행 구독 모델의 장점
- 클래스는 자신이 해야 할 작업에만 집중할 수 있음
- 외부에서 발생한 변경 사항에 대해 영향받지 않음
- 개까지 지원자신의 기능을 확장하더라도 다른 모듈에 영향을 주지 않음
- 언리얼 C++의 델리게이트 선언 방법과 활용
- 몇 개의 인자를 가지는가?
- 어떤 방식으로 동작하는가? (MULTICAST 사용 유무 결정)
- 언리얼 에디터와 함께 연동할 것인가? (DYNAMIC 사용 유무 결정)
- 이를 조합해 적합한 매크로 선택
- 느슨한 결합(Loose Coupling)이 가지는 장점
- 데이터 기반의 디자인 패턴을 설계할 때 유용하게 사용
- 언리얼 C++ 델리게이트
- 강한 결합과 느슨한 결합
- 강한 결합(Tight Coupling)
- 클래스들이 서로 의존성을 가지는 경우
- 예시와 같이 Card가 없는 경우 Person이 만들어질 수 없다.
- Person은 Card에 대한 의존성을 가진다고 함
- 새로운 카드가 도입된다면?
- 느슨한 결합(Loose Coupling)
- 실물에 의존하지 말고 추상적 설계에 의존하라. (DIP원칙)
- 왜 Person은 Card가 필요한가? 출입을 확인해야 하기 때문
- 출입에 관련된 추상적인 설계에 의존
- ICheck를 상속받은 새로운 카드 인터페이스를 선언해 해결
- 이러한 느슨한 결합 구조는 유지 보수를 손쉽게 만들어줌.
- 느슨한 결합의 간편한 구현 - 델리게이트(Delegate)
- 함수를 오브젝트처럼 관리한다면?
- 함수를 다루는 방법
- 함수 포인터를 활용한 콜백 함수의 구현
- 가능은 하나 이를 정의하고 사용하는 과정이 꽤나 복잡함
- 안정성을 스스로 검증해주어야 함
- C++ 17 구약의 std::bind와 std::function 활용은 느림
- C#의 델리게이트(delegate) 키워드
- 함수를 마치 객체처럼 다룰 수 있음
- 안정적이고 간편한 선언
- 언리얼 C++도 델리게이트를 지원함
- 느슨한 결합 구조를 간편하고 안정적으로 구현할 수 있음
- 발행 구독 디자인 패턴
- 푸시(Push)형태의 알림(Notification)을 구현하는데 적합한 디자인 패턴
- 발행자(Publisher)와 구독자(Subscriber)로 구분된다.
- 콘텐츠 제작자는 콘텐츠를 생산
- 발행자는 콘텐츠를 배포
- 구독자는 배포된 콘텐츠를 받아 소비
- 제작자와 구독자가 서로를 몰라도, 발행자를 통해 콘텐츠 를 생산하고 전달할 수 있다. (느슨한 결합)
- 발행 구독 디자인 패턴의 장점
- 제작자와 구독자는 서로를 모르기 때문에 느슨한 결합으로 구성
- 유지 보수(Maintenance)가 쉽고, 유연하게 활용될 수 있으며(Flexibility), 테스트가 쉬워진다.
- 시스템 스케일을 유연하게 조절할 수 있으며(Scalability), 기능 확장(Extensibility)이 용이하다.
- 언리얼 델리게이트 선언시 고려사항
- 어떤 데이터를 전달하고 받을 것인가? 인자의 수와 각각의 타입을 설계
- 몇 개의 인자?
- 어떤 방식?
- 일대일?
- 일대다?
- 프로그래밍 환경 설정
- C++ 프로그래밍에서만?
- UFUNCTION으로 지정된 블루프린트 함수와 사용?
- 어떤 함수와 연결할 것인가?
- 클래스 외부에 설계된 C++함수와 연결?
- 전역에 설계된 정적 함수와 연결?
- 언리얼 오브젝트의 멤버 함수와 연결? (대부분의 경우에 이 방식을 사용)
- 어떤 데이터를 전달하고 받을 것인가? 인자의 수와 각각의 타입을 설계
- 고려사항에 맞춰 언리얼 델리게이트 선언 매크로를 사용한다.
- DECLARE_{델리게이트유형}DELEGATE{함수정보}
- 델리게이트 유형 : 어떤 유형의 델리게이트인지 구상
- 일대일 형태로 C++만 지원한다면 유형은 공란으로
DECLARE_DELEGATE - 일대다 형태로 C++만 지원한다면 MULTICAST를 선언
DECLARE_MULTICAST - 일대일 형태로 블루프린트를 지원한다면 DYNAMIC을 선언
DECLARE_DYNAMIC - 일대다 형태로 블루프린트를 지원한다면 DYNAMIC과 MULTICAST를 조합
DECLARE_DYNAMIC_MULTICAST
- 일대일 형태로 C++만 지원한다면 유형은 공란으로
- 함수 정보 : 연동 될 함수 형태를 지정
- 인자가 없고 반환값도 없으면 공란
- 인자가 하나고 반환값이 없으면 OneParam으로 지정
- 인자가 세 개고 반환값이 없으면 RetVal_ThreeParams로 지정
- 최대 9개까지 지원
해당 포스트는 인프런의 <이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해>
강의를 수강하고 정리한 내용입니다.
이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해 | 이득우 - 인프런
이득우 | 대기업 현업자들이 수강하는 언리얼 C++ 프로그래밍 전문 과정입니다. 언리얼 엔진 프로그래머라면 게임 개발전에 반드시 알아야 하는 언리얼 C++ 기초에 대해 알려드립니다., [사진] 언.....................
www.inflearn.com
728x90
'공부 > 이득우의 언리얼 프로그래밍' 카테고리의 다른 글
[Study] Part 1 - 언리얼 컨테이너 라이브러리 II - 구조체와 Map (11/15) (0) | 2024.05.03 |
---|---|
[Study] Part 1 - 언리얼 컨테이너 라이브러리 I - Array와 Set (10/15) (0) | 2024.05.02 |
[Study] Part 1 - 언리얼 C++ 설계Ⅱ - 컴포지션 (8/15) (0) | 2024.04.29 |
[Study] Part 1 - 언리얼 C++ 설계 Ⅰ - 인터페이스 (7/15) (0) | 2024.04.28 |
[Study] Part 1 - 언리얼 오브젝트 리플렉션 시스템 II (6/15) (0) | 2024.04.26 |