[php] 관찰자 디자인 패턴
이번에는 소프트웨어 디자인 패턴 중 하나인 관찰자(Observer) 디자인 패턴에 대해 알아보겠습니다. 관찰자 패턴은 주로 객체 간에 일대다 의존 관계를 정의할 때 사용됩니다. 어떤 객체가 상태가 변경될 때, 의존 객체들에게 자동으로 알림을 전달하여 상태 변화에 대응할 수 있도록 하는 패턴입니다.
구성 요소
- Subject(주제): 상태를 관찰하고 있는 객체
- Observer(관찰자): Subject 객체의 상태 변화를 감지하고 이에 대응하는 동작을 수행하는 객체
- ConcreteSubject(구체적 주제): Subject를 구체화한 객체
- 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를 구체화한 객체입니다.
결론
관찰자 디자인 패턴을 사용하면 객체 간의 느슨한 결합을 유지하면서, 상태 변경 시 다수의 객체에게 자동으로 알림을 전달할 수 있습니다. 이를 통해 유연하고 확장 가능한 소프트웨어를 설계할 수 있게 됩니다.
참고문헌:
- Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley.