minstudio

옵저버 패턴 (Observer)

옵저버 패턴(Observer Pattern)은 객체의 상태가 변할 때마다 그 객체에 의존하는 다른 객체들에게 자동으로 알림(Notify)을 보내 상태를 갱신시키는 행위 패턴입니다.

유튜브 채널(Subject)을 구독(Subscribe)하면, 유튜버가 새 영상을 올릴 때마다 구독자(Observer)들의 스마트폰으로 알림이 오는 '발행-구독(Pub/Sub)' 메커니즘이 바로 이 패턴의 대표적인 예입니다.

🔔 Observer: 유튜브 구독(Pub/Sub) 시스템 Subject (주제/유튜버) 상태: 최근 업로드 "VLOG" + subscribe(Observer o) + unsubscribe(Observer o) + notifyObservers() Observer A (구독자 A) Observer B (구독자 B) Observer C (구독자 C) 알림 발송! 알림 발송! 알림 발송!
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("디자인 패턴 강좌 오픈!");
        // 두 구독자 모두에게 알림이 감
    }
}
옵저버 패턴 (Observer) | Minstudio