본문 바로가기
개발/Android

[Android] 관찰자 패턴(Observer Pattern)

by 1인용 놀이터 2025. 2. 11.
728x90
반응형

관찰자 패턴(Observer Pattern) ?

 - 이벤트를 관찰하는 패턴

 - 객체의 상태 변화를 관찰

 

한 클래스가 다른 클래스의 상태 변화를 관찰(Observe)하고자 할 때 구현하는 디자인 패턴. 즉 객체의 상태 변화를 관찰하는 관찰자.

어떤 객체의 상태가 변하거나 이벤트가 발생했을 때 그와 관련 된 객체들에게 알림을 보내는 패턴.

 

옵저버 패턴을 활용하면 다른 객체의 상태 변화를 별도의 함수 호출 없이 즉각적으로 알 수 있음.

 - 이벤트에 대한 처리를 자주 해야 하는 프로그램에서 유용함. 

 

옵저버 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 noti가 되고, 자동으로 정보가 갱신되는 1:N 관계로 정의된다.

 

구현 ?

옵저버 패턴을 구현하기 위해서는, 관찰 대상(이벤트 발생주체) 클래스와 관찰자(옵저버) 클래스 그리고 이들을 연결하는 interface(리스너) 클래스가 필요함.

관찰대상과 옵저버는 서로 직접 소통하지 않고, 리스너를 통해 간접적으로 서로의 상태나 이벤트를 전달할 수 있음.

 

package ObserverPattern;

public class main {
    public static void main(String[] args) {
        Button button = new Button();
        //옵저버 등록
        button.addObserver(new ButtonObserver());

   /*     //2)옵저버를 main 클래스에서 바로 생성
        button.addObserver(new Button.OnclickListener() {
            @Override
            public void onclick() {
                System.out.println("Main");
            }
        });*/
        //2초에 한번씩 사용자의 버튼 클릭이 발생
        while (true) {
            try {
                Thread.sleep(2000);
                button.Onclick();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

//옵저버 클래스
class ButtonObserver implements Button.OnclickListener {
 //listener.onclick()가 호출되면 실행
    @Override
    public void onclick() {
        System.out.println("Override Method Call");
    }
}
package ObserverPattern;

//관찰 클래스
public class Button {

    //이벤트를 전달해주는 인터페이스
    private OnclickListener listener;

    interface OnclickListener {
        //콜백 메서드(추상 메서드)
        public void onclick();
    }


    //옵저버를 등록하는 메서드
    public void addObserver(OnclickListener listener) {
        this.listener = listener;
    }

    public void Onclick() {
        //옵저버가 등록된 경우에만 실행
        if (listener != null) {
            System.out.println("CallBack Method Call");
            //추상 메서드 호출 (콜백 메서드)
            listener.onclick();
        }
    }
}

 

 

 

느슨한 결합(Loose Coupling) ?

이벤트를 발생하는 주체 클래스 B와 이를 관찰하는 옵저버 클래스 A가 상호 작용은 하지만, A와 B는 서로에 대해 의존성이 낮아 두개의 클래스중 하나가 변경되더라도 다른 하나는 크게 영향을 받지 않음

시스템에서 내부 의존성을 줄이기 위한 것으로 프레임워크의 안정성과 유연성이 증가.

 

 

※ 참고 사이트

https://aal-izz-well.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%B2%84%ED%8A%BC-%ED%81%B4%EB%A6%AD-%EB%A6%AC%EC%8A%A4%EB%84%88%EB%A1%9C-%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94-%EC%98%B5%EC%A0%80%EB%B2%84-%ED%8C%A8%ED%84%B4

 

[안드로이드] 버튼 클릭 리스너로 확인하는 옵저버 패턴-1편

1. 옵저버 패턴 1)옵저버 패턴이란 -객체의 상태 변화를 관찰하는 관찰자인 옵저버들을 등록해서 객체의 상태 변화가 있을 때마다 메서드 등을 통해 옵저버들에게 통지하도록 하는 디자인 패턴 -

aal-izz-well.tistory.com

 

728x90
반응형

'개발 > Android' 카테고리의 다른 글

[Android] Intent(인텐트) 정리  (0) 2025.02.12
[Android] ViewModel 정리  (0) 2025.02.11
[Android] LiveData 정리  (0) 2025.02.11
[Android] Fragment 정리  (0) 2025.02.10
[Android] Activity 정리  (0) 2025.02.10