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

심지태
∙∙조회 5
07/06 디자인 패턴 기초 - Observer 패턴, Event 기반 설계

옵저버 패턴
한 객체의 상태가 변경되면, 해당 객체를 구독하고 있는 여러 객체에게 자동으로 알리는 패턴이다.
C#에서는 주로 event, Action, delegate를 사용하여 구현한다.
객체 간 직접적인 의존성을 줄이고, UI·사운드·이펙트 등의 기능을 분리할 때 유용하다.
단, 사용이 끝난 옵저버는 반드시 이벤트 구독을 해제해야 한다.

예제 : 체력 변화 이벤트와 UI 구독 구조

csharp
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}");  
    }  
}