언리얼

이득우의 언리얼 프로그래밍 6 - 델리게이트

햄시나 2025. 4. 21. 16:31

객체지향에서 강한 결합이란, 서로 의존성을 가지는 경우를 의미한다.

 

필요로 하는 새로운 클래스를 만들때 왜 필요한지에 대해서 한 번 더 생각 해보자.

Card 클래스를 만들었던 이유는 결국엔 자격의 확인이 필요하기 때문이다.

 

그렇다면 Card 대신에 ICheck인터페이스를 활용하는것은 어떤가?

"인증"이라는 것에 더 초점을 뒀기때문에, Card가 아닌, 지문이나 핸드폰 번호로 확인하더라도 의존성이 낮아져서 유지보수가 더 좋아지게 된다.

 

하지만 이렇게 매번 인터페이스 화하는게 번거로울수도 있는가보다(나는 아직 경험하지는 못함)

그래서 함수를 오브젝트처럼 관리하면 어떨까? 하는 아이디어가 나오게 되었고, 이게 가능은 했지만 정의와 사용과정이 복잡하고 느렸다.

 

이 때문에 c++이후에 나온 언어인 c#에서는 delegate라는 것이 있는데 그걸 언리얼 c++도 지원한다.

c의  함수 포인터와는 다르게 언리얼의 델리게이트 오브젝트는 복사해도 완벽히 안전하다고 한다.

그리고 가급적 참조전달을 할 것을 권장하고 있다.


발행 구독 디자인 패턴

콘텐츠 제작자 는 콘텐츠 생산을 한다.

발행자(델리게이트)는 콘탠츠를 배포한다.

구독자는 배포된 콘텐츠를 받아 소비한다.

 

 

언리얼 델리케이트 선언시 고려사항

1. 어떤 데이터를 전달하고 받을 것인지. - 인자의 수, 인자의 타입. 일대일? 일대다?

2. c++ 프로그래밍에서만 사용할 것인지, UFUNCTION으로 지정된 블프함수와 사용할 것인지.

3. 어떤 함수와 연결할 것인지. (언리얼 내부 오브젝트의 멤버 함수와 연결하는것이 일반적이다.)

 

선언 매크로 : DECLARE_유형_DELEGATE_함수정보