자바 개발 패턴 – 전략 패턴 – 1 – 인터페이스를 이용한 전략 패턴

자바 개발 패턴 - 전략 패턴 - 1 - 인터페이스를 이용한 전략 패턴
자바 개발 패턴 – 전략 패턴 – 1 – 인터페이스를 이용한 전략 패턴

자바 개발 패턴 – 옵저버 패턴 – 0 – 옵저버 패턴의 개념과 구현 방법

안녕하세요! 자바 개발 패턴 시리즈의 첫 번째 포스트로 옵저버 패턴에 대해 알아보겠습니다. 옵저버 패턴은 자바에서 많이 사용되는 디자인 패턴 중 하나로, 객체 간의 상호작용과 데이터의 변화를 관찰하고 알림을 받을 수 있는 기능을 제공합니다. 이번 글에서는 옵저버 패턴의 개념과 구현 방법에 대해 살펴보도록 하겠습니다.

옵저버 패턴이란?

옵저버 패턴은 주제(Subject) 객체와 옵저버(Observer) 객체 간의 일대다 관계를 구성하여, 주제 객체의 상태 변화에 대해 옵저버 객체에게 자동으로 알림을 전달하는 패턴입니다. 이 패턴을 사용하면 객체 간의 결합도를 낮출 수 있으며, 유연하고 확장 가능한 시스템을 구축할 수 있습니다.

주제(Subject)와 옵저버(Observer)

주제(Subject)는 상태 변화를 관찰하고 알림을 받을 옵저버(Observer) 객체들을 관리합니다. 주제 객체는 옵저버 객체를 등록, 삭제하고, 상태 변화가 있을 때 등록된 모든 옵저버 객체들에게 알림을 전달합니다.

예를 들어, 온라인 쇼핑몰에서 상품 가격이 변경될 때, 가격 변화를 알림받고자 하는 사용자들이 있다고 가정해봅시다. 이때 쇼핑몰은 주제 객체가 되고, 사용자들은 옵저버 객체가 됩니다. 쇼핑몰은 옵저버들을 관리하면서 상품 가격이 변경되면 등록된 모든 옵저버들에게 가격 변화를 알립니다.

옵저버 패턴의 구현 방법

옵저버 패턴을 구현하기 위해 다음과 같은 단계를 따를 수 있습니다.

1. 주제(Subject) 인터페이스 작성하기

먼저 주제(Subject) 객체가 갖춰야 할 메서드를 정의한 인터페이스를 작성합니다. 주제 객체는 옵저버 객체들을 등록하고 알림을 전달하는 기능이 있어야 합니다. 예시로는 다음과 같습니다.

public interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers();
}

2. 옵저버(Observer) 인터페이스 작성하기

다음으로 옵저버(Observer) 객체가 갖춰야 할 메서드를 정의한 인터페이스를 작성합니다. 이 메서드는 주제 객체로부터 알림을 받을 때 호출됩니다. 예시로는 다음과 같습니다.

public interface Observer {
    void update();
}

3. 주제(Subject) 클래스 작성하기

이제 주제(Subject) 인터페이스를 구현한 실제 클래스를 작성합니다. 주제 객체는 등록된 옵저버 객체들을 관리하고, 상태 변화가 있을 때 알림을 전달하는 역할을 합니다. 예시로는 다음과 같습니다.

public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private int state;

    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update();
        }
    }

    public void setState(int state) {
        this.state = state;
        notifyObservers();
    }
}

4. 옵저버(Observer) 클래스 작성하기

마지막으로 옵저버(Observer) 인터페이스를 구현한 실제 클래스를 작성합니다. 이 클래스는 주제 객체로부터 상태 변화 알림을 받았을 때 필요한 동작을 수행합니다. 예시로는 다음과 같습니다.

public class ConcreteObserver implements Observer {
    private int state;

    public void update() {
        // 주제 객체로부터 상태 변화 알림을 받았을 때 수행할 동작 구현
        // 예시로는 주제 객체의 상태를 가져와서 필요한 로직을 수행하는 코드를 작성
        int newState = subject.getState();
        if (newState != state) {
            state = newState;
            // 상태 변화에 따른 동작 수행
        }
    }
}

옵저버 패턴의 활용 예시

옵저버 패턴은 다양한 분야에서 활용될 수 있습니다. 예를 들어, 게시판에 새로운 글이 작성되면 관심 있는 사용자들에게 알림을 전달하는 기능을 구현할 때 옵저버 패턴을 활용할 수 있습니다. 게시판이 주제 객체이고, 사용자들이 옵저버 객체가 되어 게시판에 등록하면 새로운 글이 작성될 때 알림을 받을 수 있습니다.

주의해야 할 점

  • 옵저버 패턴을 사용할 때는 주제 객체와 옵저버 객체 간의 결합도를 유의해야 합니다. 어떤 객체가 옵저버 역할을 수행할지 결정할 때 유연성을 고려해야 합니다.
  • 주제 객체에서 옵저버들에게 전달되는 알림은 일반적으로 브로드캐스팅되기 때문에, 모든 옵저버들이 동일한 알림을 받습니다. 필요에 따라 개별적인 알림이 필요한 경우 추가적인 구현을 고려해야 합니다.

지금까지 옵저버 패턴에 대해 소개했습니다. 옵저버 패턴은 객체 간의 상호작용을 유연하게 구현하고, 알림 기능을 효과적으로 관리할 수 있는 강력한 패턴입니다. 다음 포스트에서는 옵저버 패턴을 보다 실용적인 예제를 통해 더 자세히 살펴보겠습니다.

마무리하며, 자바 개발자 여러분들이 옵저버 패턴을 활용하여 유지보수가 용이하고 확장 가능한 소프트웨어를 개발하는 데 도움이 되기를 바랍니다. 열심히 공부하고 활용해보세요! 화이팅입니다!

답글 남기기