옵저버 패턴은 객체의 상태 변화를 관찰하는 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 옵저버에게 통지하도록 하는 디자인 패턴입니다.변화가 일어났을 때, 미리 등록된 다른 클래스에 통보해주는 패턴. 주로 event listener에 사용되고 있습니다. -> 이벤트가 일어나는 것을 감시
안드로이드의 경우 유저가 어떠한 이벤트를 사용할지 모릅니다. UI의 어떤 버튼을 누를지, 키보드로 입력하는지 등등. 이러한 시스템에 의해 발생하는 동작들을 미리 정의해둔 동작을 즉각수행하게 해줍니다. 옵저버 패턴을 활용하면 다른 객체의 상태 변화를 별도의 함수 호출 없이 즉각수행하며 이벤트에 대한 처리가 많은 프로그램이라면 효율적인 코드 작성이 가능합니다.
또한 대상과 옵저버가 밀접하게 연결되어 있지 않고 서로에 대해 알 필요가 없기 때문에 느슨한 연결이 가능합니다. 이로써 대상이나 다른 옵저버에게 영향을 주지 않고 필요에 따라 옵저버를 쉽게 추가 및 제거가 가능합니다.
시스템에 의해 발생하는 동작들이 예시로 들 수 있습니다. 위의 예시에서 나온 안드로이드에 버튼 클릭 리스너, 호출한 API가 수신되었을 경우 등이 있습니다.
interface
public interface IButtonListener {
void clickEvent(String event);
}
구현
class Button {
private String name;
private IButtonListener listener;
public Button(String name) {
this.name = name;
}
public void click(String msg) {
listener.clickEvent(msg);
}
public void addListener(IButtonListener listener) {
this.listener = listener;
}
}
public class Main {
public static void main(String[] args) {
Button button = new Button("button");
button.addListener(new IButtonListener() {
@Override
public void clickEvent(String event) {
System.out.println(event);
}
});
button.click("click 1");
button.click("click 2");
button.click("click 3");
button.click("click 4");
}
}
message 1
message 2
message 3
message 4