07/06 디자인 패턴 기초 - Observer 패턴, Event 기반 설계


옵저버 패턴
한 객체의 상태가 변경되면, 해당 객체를 구독하고 있는 여러 객체에게 자동으로 알리는 패턴이다.
C#에서는 주로event,Action,delegate를 사용하여 구현한다.
객체 간 직접적인 의존성을 줄이고, UI·사운드·이펙트 등의 기능을 분리할 때 유용하다.
단, 사용이 끝난 옵저버는 반드시 이벤트 구독을 해제해야 한다.
예제 : 체력 변화 이벤트와 UI 구독 구조
public class PlayerHealth
{
public event Action<int, int>? OnHealthChanged;
public int Current { get; private set; }
public int Max { get; }
public PlayerHealth(int max)
{
Max = max;
Current = max;
}
public void TakeDamage(int damage)
{
if (damage <= 0) return;
Current = Math.Max(0, Current - damage);
OnHealthChanged?.Invoke(Current, Max);
}
}
public class HealthView
{
public void Bind(PlayerHealth health)
{
health.OnHealthChanged += Render;
Render(health.Current, health.Max);
}
private void Render(int current, int max)
{
Console.WriteLine($"HP: {current}/{max}");
}
}



