0Pricing
Java Academy · 강의

Observer 패턴: 이벤트 알림

주가 시스템에서 이벤트 생산자와 소비자를 분리하도록 Observer를 구현합니다.

Observer 패턴: 이벤트 알림은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

Observer의 의도

Observer(게시-구독이라고도 함)는 일대다 의존 관계를 정의합니다. 주체의 상태가 변경되면 등록된 모든 Observer에게 자동으로 알림이 전달됩니다.

주체와 Observer 인터페이스

주체는 Observer 목록을 관리하고 이들에게 알림을 보냅니다. Observer는 이벤트에 반응하기 위한 update 메서드를 구현합니다.

public interface Observer {
    void update(String event, Object data);
}
public interface Subject {
    void addObserver(Observer o);
    void removeObserver(Observer o);
    void notifyObservers(String event, Object data);
}

구체 주체: Stock Ticker

주체는 상태를 보관하고 상태가 변경될 때마다 notifyObservers를 호출합니다. 또한 Observer 목록을 관리합니다.

public class StockTicker implements Subject {
    private final List<Observer> observers = new ArrayList<>();
    private double price;
    public void addObserver(Observer o)    { observers.add(o); }
    public void removeObserver(Observer o) { observers.remove(o); }
    public void setPrice(double p) {
        this.price = p;
        notifyObservers("PRICE_CHANGED", p);
    }
    public void notifyObservers(String ev, Object data) {
        for (Observer o : observers) o.update(ev, data);
    }
}

구체 Observer

각 Observer는 동일한 알림에 서로 다르게 반응합니다. 주체를 수정하지 않고도 실행 중에 Observer를 추가할 수 있습니다.

public class AlertSystem implements Observer {
    public void update(String ev, Object data) {
        if ((double) data < 100) System.out.println("ALERT: Low price!");
    }
}
public class Logger implements Observer {
    public void update(String ev, Object data) {
        System.out.println("LOG: " + ev + " = " + data);
    }
}

Observer 연결하기

주체에 Observer를 등록합니다. 주체가 변경되면 모든 Observer가 반응합니다. 더 이상 업데이트를 받지 않으려면 등록을 해제합니다.

StockTicker ticker = new StockTicker();
ticker.addObserver(new AlertSystem());
ticker.addObserver(new Logger());
ticker.setPrice(95.5); // both observers notified

java.util.Observable — 사용 중단됨

JDK에는 java.util.Observable과 java.util.Observer가 있었지만, Java 9부터 사용이 중단되었습니다. 직접 구현하거나 RxJava, Project Reactor와 같은 반응형 라이브러리를 사용하십시오.

PropertyChangeListener

Java 빈은 Swing과 JavaFX에서 많이 사용하는, 빈 속성 변경을 위한 내장 Observer 메커니즘인 PropertyChangeSupport를 제공합니다.

public class Model {
    private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
    private int value;
    public void addPropertyChangeListener(PropertyChangeListener l) { pcs.addPropertyChangeListener(l); }
    public void setValue(int v) {
        int old = this.value; this.value = v;
        pcs.firePropertyChange("value", old, v);
    }
}

Consumer를 사용하는 함수형 Observer

전용 인터페이스 대신 간단한 이벤트 콜백에 적합한 경량 Observer로 Consumer<T>를 사용하십시오.

List<Consumer<Double>> listeners = new ArrayList<>();
listeners.add(p -> { if (p < 100) System.out.println("Low price"); });
listeners.add(p -> System.out.println("Price: " + p));
double newPrice = 95.5;
listeners.forEach(l -> l.accept(newPrice));

Observer와 이벤트 버스

이벤트 버스(예: Guava EventBus)는 주체와 Observer를 한층 더 분리합니다. 주체는 누가 수신하는지 알 필요 없이 버스에 이벤트를 게시합니다. Observer는 메서드 주석을 통해 구독합니다.

// Guava EventBus example
EventBus bus = new EventBus();
bus.register(new Logger());       // subscribe
bus.post(new PriceEvent(95.5));   // publish

Observer의 스레드 안전성

여러 스레드에서 Observer를 추가하거나 제거할 수 있다면 synchronized로 목록을 보호하거나, 알림이 많은 작업에는 CopyOnWriteArrayList를 사용하십시오.

private final List<Observer> observers = new CopyOnWriteArrayList<>();

메모리 누수 방지하기

Observer 목록의 강한 참조는 GC를 방해합니다. WeakReference<Observer>를 사용하거나 더 이상 필요하지 않은 Observer를 항상 등록 해제하십시오.

실제 프레임워크의 Observer

Spring의 ApplicationEventPublisher, Android LiveData, JavaFX 속성은 모두 서로 다른 추상화 수준에서 구현된 Observer 패턴의 사례입니다.

빠른 확인

Observer 패턴의 가장 큰 이점은 무엇입니까?

정리

Observer는 일대다 알림 연결을 정의합니다. 인터페이스나 함수형 Consumer를 통해 구현할 수 있습니다. 스레드 안전성을 위해 CopyOnWriteArrayList를 사용하고, 메모리 누수를 방지하기 위해 Observer를 항상 등록 해제하십시오.

자주 묻는 질문

“Observer 패턴: 이벤트 알림” 강의는 무료인가요?

네 — “Observer 패턴: 이벤트 알림” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Observer 패턴: 이벤트 알림”에서 뭘 배우나요?

주가 시스템에서 이벤트 생산자와 소비자를 분리하도록 Observer를 구현합니다. 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“Observer 패턴: 이벤트 알림” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Observer 패턴: 이벤트 알림
  2. Strategy 패턴: 교체 가능한 알고리즘
  3. Command 패턴: 동작 캡슐화
  4. Template Method: 알고리즘 뼈대 정의
← Java Academy(으)로 돌아가기