[php] 관찰자 디자인 패턴

이번에는 소프트웨어 디자인 패턴 중 하나인 관찰자(Observer) 디자인 패턴에 대해 알아보겠습니다. 관찰자 패턴은 주로 객체 간에 일대다 의존 관계를 정의할 때 사용됩니다. 어떤 객체가 상태가 변경될 때, 의존 객체들에게 자동으로 알림을 전달하여 상태 변화에 대응할 수 있도록 하는 패턴입니다.

구성 요소

  1. Subject(주제): 상태를 관찰하고 있는 객체
  2. Observer(관찰자): Subject 객체의 상태 변화를 감지하고 이에 대응하는 동작을 수행하는 객체
  3. ConcreteSubject(구체적 주제): Subject를 구체화한 객체
  4. ConcreteObserver(구체적 관찰자): Observer를 구체화한 객체

예시

다음은 PHP로 작성된 관찰자 디자인 패턴의 간단한 예시 코드입니다.

class Subject {
    private $observers = [];

    public function attach($observer) {
        $this->observers[] = $observer;
    }

    public function detach($index) {
        unset($this->observers[$index]);
    }

    public function notify() {
        foreach ($this->observers as $observer) {
            $observer->update();
        }
    }
}

class ConcreteSubject extends Subject {
    private $state;

    public function setState($state) {
        $this->state = $state;
        $this->notify();
    }
}

interface Observer {
    public function update();
}

class ConcreteObserver implements Observer {
    public function update() {
        // 상태 변화에 대한 처리 로직
    }
}

위 코드에서 Subject는 주제를 나타내며, ConcreteSubject는 Subject를 구체화한 객체입니다. Observer는 관찰자를 나타내며, ConcreteObserver는 Observer를 구체화한 객체입니다.

결론

관찰자 디자인 패턴을 사용하면 객체 간의 느슨한 결합을 유지하면서, 상태 변경 시 다수의 객체에게 자동으로 알림을 전달할 수 있습니다. 이를 통해 유연하고 확장 가능한 소프트웨어를 설계할 수 있게 됩니다.

참고문헌: