PropertyChangeSupport

PropertyChangeSupport (속성 변경 지원 클래스)

바운드 속성을 지원하는 빈이 사용할 수 있는 유틸리티 클래스예요. 리스너 목록을 관리하고 PropertyChangeEvent를 그 리스너들에게 전달해요. 이 클래스의 인스턴스를 빈의 멤버 필드로 두고 이런 작업을 위임할 수 있어요. PropertyChangeListener는 모든 속성에 대해, 또는 이름으로 지정된 특정 속성에 대해서만 등록할 수 있어요.

출처: Java API Reference

본문

JavaBeans 명세의 규칙과 권장 사항을 따르는 PropertyChangeSupport 사용 예시예요.

public class MyBean {
    private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        this.pcs.addPropertyChangeListener(listener);
    }
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        this.pcs.removePropertyChangeListener(listener);
    }

    private String value;
    public String getValue() { return this.value; }
    public void setValue(String newValue) {
        String oldValue = this.value;
        this.value = newValue;
        this.pcs.firePropertyChange("value", oldValue, newValue);
    }
    [...]
}

주요 메서드는 다음과 같아요.

public PropertyChangeSupport(Object sourceBean)

public void addPropertyChangeListener(PropertyChangeListener listener)
public void removePropertyChangeListener(PropertyChangeListener listener)
public PropertyChangeListener[] getPropertyChangeListeners()
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)
public PropertyChangeListener[] getPropertyChangeListeners(String propertyName)
public void firePropertyChange(String propertyName, Object oldValue, Object newValue)
  • add/removePropertyChangeListener — 모든 속성 또는 특정 속성에 대한 리스너를 등록·제거해요.
  • firePropertyChange() — 속성 변경을 알리는 PropertyChangeEvent를 발생시켜요.
  • getPropertyChangeListeners() — 등록된 리스너 배열을 반환해요.

PropertyChangeSupport 인스턴스는 스레드 안전(thread-safe)해요. 직렬화 가능하며, 직렬화 시 직렬화 가능한 리스너는 저장·복원되고, 그렇지 않은 리스너는 건너뜁니다. 직접 하위 클래스로 SwingPropertyChangeSupport가 있어요.

더 알아보기 (Learn more)

Java 공식 API