옵저버란?

그대로 해석하자면 관찰자라는 뜻이다.

관찰자 패턴은 변화가 일어났을 때 미리 등록된 다른 클래스에 통보해주는 패턴을 구현한 것이다.

주로 event listner 에서 사용한다.

 

특정 ButtonListener 인터페이스를 구현하고, 해당 버튼 인터페이스를 상속한 곳에서 click시 해당 메세지를 전달하도록 하자.

public interface IButtonListener {
    public void clickEvent(String message);
}

 

Button 클래스를 생성한다. 해당 클래스 내에는 리스너를 추가하는 addListener와 click시 해당 리스너로 메세지를 전달하도록 내부적으로 구현한다.

 

public class Button {
    
    private String name;
    private IButtonListener buttonListener;

    public Button(String name){
        this.name = name;
    }

    public void click(String message){
        buttonListener.clickEvent(message);
    }

    public void addListener(IButtonListener buttonListener){
        this.buttonListener = buttonListener;
    }

}

 

그럼 메인에서 Button 객체를 생성하고, 특정 리스너를 추가한 후 click 동작을 실행해보자.

아래는 클릭 이벤트시 해당 메세지를 바로 출력하도록 간단히 구현한 예제다.

 

 /******************** 옵저버 패턴 ***********************/
        
        Button button = new 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");
        
  
  /****************** 결과 ****************************/
메세지 전달 : click 1
메세지 전달 : click 2
메세지 전달 : click 3
메세지 전달 : click 4

 

정상적으로 특정 이벤트가 발생했을 때 구현한 Listener의 클릭이벤트가 실행되는 것을 확인할 수 있다.

많이 사용되니 많이 알아두도록 하자.

 

 

 

참고

- 패스트캠퍼스 예상국 Backend Developer님 강의(Spring초격차)

+ Recent posts