Day 8 – Observer Pattern

관찰자 패턴은 객체 간의 일대다 종속성을 정의합니다. 이 패턴을 사용하면 한 개체의 상태가 변경되면 해당 개체에 종속된 다른 모든 개체에 자동으로 알림이 전달되고 업데이트됩니다.

이 패턴은 분산 이벤트 처리 시스템을 구현할 때 널리 사용됩니다.


구성 요소

관찰자 패턴에는 다음과 같은 주요 구성 요소가 있습니다.

  • Subject(주체): 주체는 관찰자 목록을 유지하고 상태가 변경되면 등록된 관찰자에게 자동으로 알립니다.
  • Observer(관찰자): 관찰자는 대상의 상태 변화를 감지하고 반응합니다. 주체에 등록되어 있으며 주체의 상태가 변경될 때 호출되는 메서드를 구현합니다.

Code

  • WeatherStation은 Subject(주체) 역할을 하고 디스플레이는 Observer(관찰자) 역할을 합니다.
  • SetTemperature 메서드를 호출하여 온도가 변경되면 관찰자에게 알립니다.
  • 이 예제는 간단하지만 Observer 패턴의 기본 개념을 보여줍니다. 실제로는 보다 복잡한 시나리오에서 활용됩니다.
IObserver.cs
interface IObserver
{
    void Update(int temperature);
}
C#
Display.cs
class Display : IObserver
{
    public void Update(int temperature)
    {
        Console.WriteLine($"Current temperature: {temperature}°C");
    }
}
C#
ISubject.cs
interface ISubject
{
    void RegisterObserver(IObserver observer);
    void UnregisterObserver(IObserver observer);
    void NotifyObservers();
}
C#
WeatherStation.cs
class WeatherStation : ISubject
{
    private List<IObserver> observers = new List<IObserver>();
    private int temperature;

    public void SetTemperature(int temp)
    {
        temperature = temp;
        NotifyObservers();
    }

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

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

    public void NotifyObservers()
    {
        foreach (var observer in observers)
        {
            observer.Update(temperature);
        }
    }
}
C#
Program.cs

var weatherStation = new WeatherStation();
var display = new Display();

weatherStation.RegisterObserver(display);

// Notifies observers when temperature changes
weatherStation.SetTemperature(25);
C#

Links

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다