카테고리 없음

20250422 TIL 옵저버 패턴

note4973 2025. 4. 22. 21:02
// Subject
public class HealthSystem
{
    public event Action<int> OnHealthChanged;

    private int health = 100;

    public void TakeDamage(int amount)
    {
        health -= amount;
        OnHealthChanged?.Invoke(health); // 옵저버들에게 알림
    }
}

// Observer
public class HealthUI : MonoBehaviour
{
    [SerializeField] private HealthSystem healthSystem;

    void OnEnable()
    {
        healthSystem.OnHealthChanged += UpdateHealthBar;
    }

    void OnDisable()
    {
        healthSystem.OnHealthChanged -= UpdateHealthBar;
    }

    void UpdateHealthBar(int currentHealth)
    {
        Debug.Log("현재 체력: " + currentHealth);
    }
}

 

TIL: 옵저버 패턴 (Observer Pattern)

 오늘 배운 것

옵저버 패턴객체 간 1:N 의존 관계를 정의해,
한 객체의 상태 변화가 있을 때, 의존된 객체들이 자동으로 알림을 받도록 하는 패턴이다.

즉, **"Subject(관찰 대상)"**와 **"Observer(관찰자)"**가 존재하고,
Subject가 변경되면 등록된 Observer들이 알림을 받아 반응한다.


 개념 요약

구성 요소설명
Subject (Publisher) 상태를 갖고 있고, 변화가 생기면 Observer에게 알림
Observer (Subscriber) Subject에 등록되고, 상태 변화 시 콜백을 받음

왜 필요한가?

  • 객체 간 결합도를 낮춘다 (Loose Coupling)
  • 이벤트 기반 시스템에서 매우 유용
  • UI, 이벤트 시스템, 데이터 동기화 등에 자주 사용됨

Unity에서 활용 예

  • 체력바(HP UI): 체력 변화 알림 받음
  • 미션 시스템: 특정 행동을 하면 알림 받아 퀘스트 진행
  • 타일맵/데이터 업데이트: 타일 상태 변경 시 UI 동기화

 관련 개념

개념설명
이벤트 & 델리게이트 C#에서 옵저버 패턴을 가장 쉽게 구현하는 방식
ScriptableObject 이벤트 Unity에서 자주 쓰이는 옵저버 구현 형태
Reactive Programming 옵저버 패턴을 더 강력하게 확장한 형태 (ex. UniRx)