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