옵저버 패턴 (Observer)
옵저버 패턴(Observer Pattern)은 객체의 상태가 변할 때마다 그 객체에 의존하는 다른 객체들에게 자동으로 알림(Notify)을 보내 상태를 갱신시키는 행위 패턴입니다.
유튜브 채널(Subject)을 구독(Subscribe)하면, 유튜버가 새 영상을 올릴 때마다 구독자(Observer)들의 스마트폰으로 알림이 오는 '발행-구독(Pub/Sub)' 메커니즘이 바로 이 패턴의 대표적인 예입니다.
import java.util.ArrayList;
import java.util.List;
// Subject (발행자)
class NewsPublisher {
private List<Subscriber> subscribers = new ArrayList<>();
private String latestNews;
public void addSubscriber(Subscriber s) { subscribers.add(s); }
public void removeSubscriber(Subscriber s) { subscribers.remove(s); }
public void publishNews(String news) {
this.latestNews = news;
notifySubscribers();
}
private void notifySubscribers() {
for (Subscriber s : subscribers) {
s.update(latestNews);
}
}
}
// Observer (구독자)
interface Subscriber {
void update(String news);
}
class EmailSubscriber implements Subscriber {
private String name;
public EmailSubscriber(String name) { this.name = name; }
public void update(String news) {
System.out.println(name + "님 메일 수신: " + news);
}
}
public class Main {
public static void main(String[] args) {
NewsPublisher publisher = new NewsPublisher();
Subscriber sub1 = new EmailSubscriber("Alice");
Subscriber sub2 = new EmailSubscriber("Bob");
publisher.addSubscriber(sub1);
publisher.addSubscriber(sub2);
publisher.publishNews("디자인 패턴 강좌 오픈!");
// 두 구독자 모두에게 알림이 감
}
}