Java는 객체 지향 프로그래밍 언어로 다양한 프로그램을 개발할 수 있습니다. 이 중에서도 인터페이스와 메디에이터 패턴은 유용하게 쓰이는 기능입니다. 이번 글에서는 Java 인터페이스를 사용한 메디에이터 패턴의 구현 방법에 대해 알아보겠습니다.
Java 인터페이스란?
Java 인터페이스는 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 인터페이스는 클래스와 비슷하지만, 추상적인 개념으로 클래스와 달리 구현할 때 메소드의 몸체(body)를 가지지 않습니다. 인터페이스는 구현해야 할 기능을 정의하기 위한 일종의 틀이며, 인터페이스를 구현하는 클래스는 반드시 인터페이스에서 정의한 메소드들을 구현해야 합니다.
메디에이터 패턴이란?
메디에이터 패턴은 객체 지향 디자인 패턴 중 하나입니다. 이 패턴은 객체들이 직접적으로 상호작용하지 않고, 중개자(mediator)를 통해 상호작용할 수 있도록 하는 패턴입니다. 이를 통해 객체들 간의 결합도를 낮추고 유연성을 높일 수 있습니다.
Java 인터페이스를 사용한 메디에이터 패턴 구현하기
Java에서 메디에이터 패턴을 구현할 때, 인터페이스를 사용하면 유용합니다. 이를 통해 중개자가 제어해야 하는 객체들의 메소드를 인터페이스로 정의하고, 중개자 클래스가 이 인터페이스를 구현함으로써 객체들 간의 상호작용이 이루어질 수 있습니다.
아래는 Java 인터페이스를 사용한 메디에이터 패턴의 예시입니다.
// Mediator 인터페이스
public interface Mediator {
public void send(String message, Colleague colleague);
}
// Colleague 인터페이스
public interface Colleague {
public void send(String message);
public void receive(String message);
}
// ConcreteMediator 클래스
public class ConcreteMediator implements Mediator {
private List colleagues;
public ConcreteMediator() {
colleagues = new ArrayList();
}
public void addColleague(Colleague colleague) {
colleagues.add(colleague);
}
public void send(String message, Colleague originator) {
for (Colleague colleague : colleagues) {
if (colleague != originator) {
colleague.receive(message);
}
}
}
}
// ConcreteColleague 클래스
public class ConcreteColleague implements Colleague {
private Mediator mediator;
public ConcreteColleague(Mediator mediator) {
this.mediator = mediator;
}
public void send(String message) {
mediator.send(message, this);
}
public void receive(String message) {
System.out.println("Received message: " + message);
}
}
위 예시에서는 Mediator와 Colleague 인터페이스를 정의하고, ConcreteMediator와 ConcreteColleague 클래스에서 이를 구현합니다. ConcreteMediator 클래스에서는 colleagues 리스트에 Colleague 객체들을 추가하고, send() 메소드에서 해당 객체들의 receive() 메소드를 호출합니다. ConcreteColleague 클래스에서는 Mediator 객체를 생성자에서 받아 send() 메소드를 호출할 때, Mediator 객체의 send() 메소드를 호출합니다.
이를 통해 중개자 객체가 Colleague 객체들의 상호작용을 제어할 수 있게 됩니다.
Java 인터페이스를 사용한 메디에이터 패턴은 객체 간의 결합도를 낮추고 유연성을 높일 수 있는 패턴입니다. 인터페이스를 사용하여 메시지 전송을 정의하고, 중개자 클래스에서 이를 구현함으로써 객체들 간의 상호작용이 이루어집니다. 이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.