Make Unreal REAL.
article thumbnail
Unreal Engine Blueprint Design Patterns: Code to Blueprints

 

옵저버 패턴

발행-구독 패턴(Publisher-Subscriber Pattern)이라고도 불린다.
상태 변경을 Broadcast하는 발행자가 있고, 그것을 듣는 구독자가 있다.

구독자에게서 발행자를 디커플링할 때 유용하다.
발행자는 구독자에 대한 정보를 몰라도 문제가 없다.

GoF에 따르면, 옵저버 패턴 사용 시 주의할 점은 삭제된 구독자의 무효(Dangling) 참조를 계속 유지하면 메모리 릭이 발생한다는 것이다.
구독자는 자신이 삭제될 때 발행자에게 자신은 이제 구독을 취소하겠다고 알려야 한다.
언리얼 엔진에서는 여러 개의 함수를 등록할 수 있는 멀티캐스트 델리게이트가 옵저버 패턴의 활용이라고 할 수 있다.

 

시계탑을 발행자로 하고 Allen을 구독자로 하는 옵저버 패턴 실습을 진행해본다.

 

구독자 인터페이스는 Broadcast를 받았을 때 실행할 Update 함수를 구현해야 한다.

발행자 인터페이스는 구독자 등록, 구독 취소, Broadcast 함수를 구현해야 한다.

 

 

시계탑에 발행자 인터페이스를 추가하고 함수를 구현한다.

  • 구독 함수는 전달 받은 구독자를 구독자 배열에 추가한다.
  • 구독 취소 함수는 전달 받은 구독자를 배열에서 제거한다.
  • Broadcast 함수는 구독자 배열에 있는 모든 구독자에 대해 Update 함수를 실행시켜 시간을 갱신시킨다.

 

 

구독자인 Allen은 생성자에서 발행자를 구독해 자신을 등록한다.

 

 

Allen에게는 구독자 인터페이스를 추가하고 Update 함수를 구현한다.

  • 발행자인 시계탑에서 Broadcast가 발생하면 Allen의 Update 함수가 호출된다.

 

 

월드에 띄워 예제를 실행하기 위한 블루프린트 액터를 만든다.

 

게임이 시작하면 발행자인 시계탑과 구독자인 앨런을 스폰하고 시계탑에서 3번 시간을 변경한다.

 

 

시계탑의 시간이 변경되면 Broadcast가 발생해 등록된 모든 구독자의 Update 함수를 실행시킨다.

 

 

시계탑을 구독한 후 시계탑의 시간이 3번 변경되고 3번의 Broadcast가 발생해 Allen이 3번 문자열을 출력했다.

 

profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그