[Design Pattern] 3. 관찰자 패턴(observer)

업데이트:

카테고리:

태그: ,




관찰자(observer) Pattern

관찰자(observer)






관찰자 패턴 (observer)

image

  • 한 객체의 상태 변화를 관찰하는 다수의 객체(관찰자들)
  • 주인공 객체가 변하면 관찰자들에게도 자동으로 이를 알려줌
  • 상태 변화에 따른 자동 업데이트 (구동 시스템과 유사)
  • 의존성 줄이고 중요한 정보를 적절히 공유하는 형태
  • ex) 플레이어 체력변화에 따른 이벤트를 구현할 때 유용
observer 코드보기
// 관찰자 인터페이스
public interface IObserver
{
    void Update(int health);
}

// 주인공 인터페이스
public interface ISubject
{
    void Attach(IObserver observer);
    void Detach(IObserver observer);
    void Notify();
}

// 플레이어 클래스 (주인공)
public class Player : ISubject
{
    private int health;
    private List<IObserver> observers = new List<IObserver>();

    public int Health
    {
        get { return health; }
        set 
        { 
            health = value;
            Notify();
        }
    }

    public void Attach(IObserver observer)
    {
        observers.Add(observer);
    }

    public void Detach(IObserver observer)
    {
        observers.Remove(observer);
    }

    public void Notify()
    {
        foreach (var observer in observers)
        {
            observer.Update(health);
        }
    }
}

// UI 클래스 (관찰자)
public class HealthDisplay : IObserver
{
    public void Update(int health)
    {
        Console.WriteLine("Health updated to: " + health);
        // UI 업데이트 로직
    }
}

// 옵저버 패ㄴ 사용 예시
Player player = new Player();
HealthDisplay display = new HealthDisplay();

player.Attach(display);
player.Health = 90; // 플레이어의 체력 변경. 자동으로 관찰자들에게 알림이 감. //set부분에 notify()








잡담, 정리

  • 디자인 패턴은 애초에 특정 문제를 해결하기 위해 고려된 것.(성능, 메모리 사용 고려)
  • 추가 내용 정리




[C#] 디자인 패턴 (Design Pattern)
TOP


📔

댓글남기기