이득우의 언리얼 프로그래밍 6 - 델리게이트
객체지향에서 강한 결합이란, 서로 의존성을 가지는 경우를 의미한다.
필요로 하는 새로운 클래스를 만들때 왜 필요한지에 대해서 한 번 더 생각 해보자.
Card 클래스를 만들었던 이유는 결국엔 자격의 확인이 필요하기 때문이다.
그렇다면 Card 대신에 ICheck인터페이스를 활용하는것은 어떤가?
"인증"이라는 것에 더 초점을 뒀기때문에, Card가 아닌, 지문이나 핸드폰 번호로 확인하더라도 의존성이 낮아져서 유지보수가 더 좋아지게 된다.
하지만 이렇게 매번 인터페이스 화하는게 번거로울수도 있는가보다(나는 아직 경험하지는 못함)
그래서 함수를 오브젝트처럼 관리하면 어떨까? 하는 아이디어가 나오게 되었고, 이게 가능은 했지만 정의와 사용과정이 복잡하고 느렸다.
이 때문에 c++이후에 나온 언어인 c#에서는 delegate라는 것이 있는데 그걸 언리얼 c++도 지원한다.
c의 함수 포인터와는 다르게 언리얼의 델리게이트 오브젝트는 복사해도 완벽히 안전하다고 한다.
그리고 가급적 참조전달을 할 것을 권장하고 있다.
발행 구독 디자인 패턴
콘텐츠 제작자 는 콘텐츠 생산을 한다.
발행자(델리게이트)는 콘탠츠를 배포한다.
구독자는 배포된 콘텐츠를 받아 소비한다.
언리얼 델리케이트 선언시 고려사항
1. 어떤 데이터를 전달하고 받을 것인지. - 인자의 수, 인자의 타입. 일대일? 일대다?
2. c++ 프로그래밍에서만 사용할 것인지, UFUNCTION으로 지정된 블프함수와 사용할 것인지.
3. 어떤 함수와 연결할 것인지. (언리얼 내부 오브젝트의 멤버 함수와 연결하는것이 일반적이다.)
선언 매크로 : DECLARE_유형_DELEGATE_함수정보