(유니티) 중재자 패턴

티원·2025년 11월 16일

디자인패턴

목록 보기
11/16

요약
클래스끼리 직접 호출하는게 아닌 관리하는 하나의 클래스(중재자)를 만들어서 그곳에서 처리
이미 예전부터 사용하고있었음 (싱글톤 + 싱글톤을 통해서 기능 수행)

중재자 패턴

객체간의 직접 통신을 제한하고 중재자를 통해서 협력하게 하는 패턴. 여러 객체들의 상호작용을 하나로 집중시켜 결합도 감소

Class A,B, Manager 라는 3개의 클래스가 있을때
A와 B가 서로의 클래스를 알아서 A에서 B.PlaySound(),B에서 A.Play() 이렇게 하는게 아닌
A에서 Manager의 PlaySound를 호출하면 Manager에서 B.PlaySound를 호출한다

중재자 패턴은 이미 다른곳에 적용이되어있는 경우가 많아고한다 (MVP, UI이벤트시스템)
mvp패턴의 P가 중재자 역할을 수행한다. 중재자 패턴은 아님

강사님 답변: 중재자 패턴은 그 자체로 구성해서 쓰는 경우는 잘 없고
MVP 같은 패턴이나 UI의 이벤트 시스템 처럼 다른 구조에 적용되어있는 경우가 많다
현업에서 중재자 패턴을 별도의 목적으로 만들어서 사용하는 경우는 잘 없다고 한다

코드 (싱글톤 + 중재자패턴) 완벽한 중재자 패턴 예시는아님

중재자 패턴의 완벽한 예시는 아니지만... 결과는 비슷한것 같아 정리

public class GameManagers : MonoBehaviour //SingletonBehaviour<GameManager> //싱글톤으로 했다고 치고
{
    public static GameManagers Instance; //싱글톤으로 하나만 된다는 코드가 있다고 가정

	public event Action<int> myEvent;
    public void Start()
    {
        myEvent.Invoke(10);
    }

}

public class Player : MonoBehaviour
{
    void OnEnable()
    {
        GameManagers.Instance.myEvent += TakeDamage;
    }
    void OnDisable()
    {
        GameManagers.Instance.myEvent -= TakeDamage;
    }
    public void TakeDamage(int num)
    {
        Debug.Log($"{num}만큼 데미지를 받았어요");
    }
}

후기

이미 알게모르게 싱글톤에서 간접적으로 쓰고있었던 디자인 패턴이라고 생각한다
클래스끼리 직접 호출하는게 아닌 관리하는 하나의 클래스(중재자)를 만들어서 그곳에서 처리

0개의 댓글