본문 바로가기
개발/C#

유니티 C# 옵저버 패턴 간단 구현 Unity Observer

by SPNK 2023. 3. 19.
반응형

옵저버 패턴

객체 간에 일대다 종속 관계를 정의하여 한 객체의 상태 변경이 다른 객체에 자동으로 통지되는 패턴.
게임 내에서 이벤트 시스템 또는 UI 업데이트와 같은 상황에서 유용합니다.

using UnityEngine;
using System;

// 이벤트에 대한 데이터
public class EventData
{
    public string eventName;
    public int eventValue;
}

// 옵서버 인터페이스
public interface IObserver
{
    void OnNotify(EventData data);
}

// 옵서버를 관리하는 클래스
public class Subject
{
    private List<IObserver> _observers = new List<IObserver>();

    // 옵서버 등록
    public void RegisterObserver(IObserver observer)
    {
        if (!_observers.Contains(observer))
        {
            _observers.Add(observer);
        }
    }

    // 옵서버 제거
    public void RemoveObserver(IObserver observer)
    {
        if (_observers.Contains(observer))
        {
            _observers.Remove(observer);
        }
    }

    // 옵서버에게 알림
    public void Notify(EventData data)
    {
        foreach (var observer in _observers)
        {
            observer.OnNotify(data);
        }
    }
}

// 예시로 사용할 옵서버
public class ExampleObserver : MonoBehaviour, IObserver
{
    public void OnNotify(EventData data)
    {
        Debug.Log($"Event Received: {data.eventName}, Value: {data.eventValue}");
    }
}

// 예시로 사용할 이벤트 발송자
public class EventSender : MonoBehaviour
{
    private Subject _subject = new Subject();

    private void Start()
    {
        EventData data = new EventData { eventName = "Example Event", eventValue = 42 };
        _subject.Notify(data);
    }
}
반응형

댓글