Java는 객체 지향 프로그래밍 언어로서 많은 개발자들이 사용하는 언어 중 하나이다. Java에서는 인터페이스라는 기능을 제공하며, 이를 이용하여 다양한 디자인 패턴을 구현할 수 있다. 이번 글에서는 그 중에서도 옵저버 패턴을 구현하는 방법에 대해서 알아보려 한다.
Java 인터페이스란 무엇인가?
Java에서 인터페이스는 클래스와 유사한 형태를 갖고 있지만, 클래스와 달리 추상 메소드와 정적 상수만을 가지고 있다. 인터페이스는 다른 클래스에서 해당 메소드를 구현하도록 강제하는 역할을 할 수 있으며, 이는 다형성과 결합도를 낮추어 유지보수성을 높이는 데 도움을 준다. 인터페이스는 다른 클래스와 마찬가지로 패키지 안에 저장되며, 인터페이스를 구현하는 클래스는 implements 키워드를 사용한다.
옵저버 패턴의 개념과 원리
옵저버 패턴은 객체의 상태 변화를 관찰하고, 이를 미리 등록한 다른 객체에게 알리는 디자인 패턴이다. 이를 구현하기 위해서는 Subject(주체)와 Observer(관찰자) 두 가지 역할을 하는 클래스가 필요하다. Subject 클래스는 상태 변화를 알리는 notifyObservers() 메소드를 가지고 있으며, 이 메소드는 Observer 클래스에서 구현한 update() 메소드를 호출하여 상태 변화를 전달한다. Observer 클래스는 Subject 클래스의 상태 변화를 감시하며, 상태 변화가 발생하면 update() 메소드를 통해 상태를 처리한다.
Java 인터페이스를 활용한 옵저버 패턴 구현하기
Java에서는 인터페이스를 활용하여 옵저버 패턴을 구현할 수 있다. Subject 클래스는 Observer 인터페이스를 구현하고, notifyObservers() 메소드에서 Observer 인터페이스의 update() 메소드를 호출하여 상태 변화를 알린다. Observer 클래스는 Observer 인터페이스를 구현하여 update() 메소드를 구현하며, 상태 변화가 발생하면 이를 처리한다.
아래는 Java 인터페이스를 사용한 간단한 예시 코드이다.
interface Observer {
void update(String message);
}
class Subject {
List observers = new ArrayList();
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
class ConcreteObserver implements Observer {
public void update(String message) {
System.out.println("Received message: " + message);
}
}
public class Main {
public static void main(String[] args) {
Subject subject = new Subject();
Observer observer = new ConcreteObserver();
subject.attach(observer);
subject.notifyObservers("Hello, World!");
}
}
위 코드에서 Subject 클래스는 Observer 인터페이스를 구현하고, notifyObservers() 메소드에서 Observer 인터페이스의 update() 메소드를 호출한다. ConcreteObserver 클래스는 Observer 인터페이스를 구현하여 update() 메소드를 구현하며, 상태 변화가 발생하면 이를 처리한다. Main 클래스에서는 Subject 클래스를 생성하고, ConcreteObserver 클래스를 생성하여 Subject 클래스에 등록하고, 상태 변화를 알린다.
Java에서는 인터페이스를 활용하여 다양한 디자인 패턴을 구현할 수 있으며, 옵저버 패턴 또한 인터페이스를 활용하여 구현할 수 있다. 옵저버 패턴은 상태 변화를 감시하고, 이를 처리하는 데 유용한 디자인 패턴으로서, Java에서 인터페이스를 사용하여 간단하게 구현할 수 있다.