728x90
반응형
Observer Pattern
감시자로써 역할을 합니다. 객체를 감시하다가 이벤트나, 변화가 일어 났을 때, 미리 등록된 다른 클래스에 통보해주는 패턴을 구현한 것입니다. 이 패턴은 Event Listener에서 많이 사용하고 있습니다.

Observer Pattern 구현
[ButtonListener interface]
package Java.observerPattern;
public interface ButtonListener {
void clickEvent(String event);
}
ButtonListener를 만들어서 clickEvent가 생길 때 event를 어떻게 처리할지에 대한 메서드를 정의하였고, Main 메서드에서 clickEvent를 구현할 것입니다.
[Button class]
package Java.observerPattern;
public class Button {
private String name;
private ButtonListener buttonListener;
public String getName() {
return name;
}
public Button(String name) {
this.name = name;
}
public void click(String message){
buttonListener.clickEvent(message);
}
public void addButtonListener(ButtonListener buttonListener){
this.buttonListener = buttonListener;
}
}
Button class 에서는 ButtonListener를 필드변수로 갖습니다. 어떤 버튼에서 이벤트가 발생했는지 알기위해 이름을 필드 변수로 갖고 출력해주는 get메서드를 생성하였습니다.
그리고 Button이 클릭되었을 때 필드 변수로 갖고 있던 ButtonListener에서 clickEvent가 호출되도록 하였습니다.
또한 Button에 ButtonListener를 추가해주는 메서드도 추가하였습니다.
[ObserverMain class]
package Java.observerPattern;
public class ObserverMain {
public static void main(String[] args) {
Button buttonA = new Button("A Button");
Button buttonB = new Button("B Button");
buttonA.addButtonListener(new ButtonListener() {
@Override
public void clickEvent(String event) {
System.out.println(buttonA.getName()+": "+event);
}
});
buttonB.addButtonListener(new ButtonListener() {
@Override
public void clickEvent(String event) {
System.out.println(buttonB.getName()+": "+event);
}
});
buttonA.click("Message Send: click001");
buttonA.click("Message Send: click002");
buttonB.click("Message Send: click003");
buttonB.click("Message Send: click004");
}
}
Main에서는 ButtonA와 ButtonB의 객체를 만들고 ButtonListener를 각각 추가해주었습니다. 그리고 익명객체로 생성하여 내부에서 동작하는 부분을 설정해주었습니다.
그리고 각각의 버튼이 눌렀을 때 이벤트를 출력하도록 했고, 결과는 아래와 같습니다.
결과
A Button: Message Send: click001
A Button: Message Send: click002
B Button: Message Send: click003
B Button: Message Send: click004
결론
Observer Pattern에 대해 알게되었습니다.
버튼에 리스너를 설정해주고 버튼을 감시하고 있다가
그 버튼이 클릭이 될 때마다 메인에서 로그가 출력되도록하였습니다.
간단한 예제로 실습을 하면서 웹 프로그래밍을 공부하였을 때
EventListener가 어떻게 동작하는지 알게되었습니다. 그리고
백엔드 파트 실무에서는 어떻게 옵저버 패턴이 사용되는지
궁금했습니다.
728x90
반응형
'JAVA' 카테고리의 다른 글
[Java] Reflection (0) | 2022.08.24 |
---|---|
[Java] Facade Pattern (0) | 2022.08.01 |
[Java] Decorator Pattern - Example Car (0) | 2022.08.01 |
[Java] Proxy Pattern - AOP (0) | 2022.07.31 |
[Java] Proxy Pattern (0) | 2022.07.31 |