자바 디자인 패턴: 미디에이터 패턴으로 객체 간 통신 제어
자바 디자인 패턴 소개
디자인 패턴은 소프트웨어 개발 과정에서 문제를 해결하는 방법을 제시하는 일련의 지침이다. 디자인 패턴을 사용하면 개발자는 일반적인 문제를 해결하기 위해 이전에 검증된 솔루션을 사용할 수 있다.
자바 언어는 객체 지향 프로그래밍 언어로, 객체를 중심으로 개발이 이루어진다. 따라서 자바 개발자들은 객체 지향 디자인 패턴을 잘 이해하고 있어야 한다.
자바 디자인 패턴은 GoF(Gang of Four)에서 처음 소개되었다. GoF는 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides로 이루어진 네 명의 개발자들로 구성되어 있다.
자바 디자인 패턴은 문제를 해결하기 위해 일반적으로 사용되는 23가지 디자인 패턴을 포함한다. 디자인 패턴은 크게 생성 패턴, 구조 패턴 및 행동 패턴으로 구성된다.
미디에이터 패턴 이해
미디에이터 패턴은 객체 간 통신을 제어하는 데 사용된다. 이 패턴은 객체 간 복잡한 상호 작용을 캡슐화하고, 느슨하게 결합된 객체를 만들어준다.
미디에이터 패턴은 중재자(Mediator) 객체를 사용하여 객체 간 통신을 제어한다. 중재자는 객체 간의 직접적인 통신을 허용하지 않으며, 대신 모든 객체 간의 통신 중개를 담당한다.
미디에이터 패턴은 다음과 같은 구성 요소로 구성된다.
- Mediator(중재자) : 객체 간 통신을 중재하는 객체
- Colleague(동료) : 중재자와 통신하는 객체
미디에이터 패턴은 다음과 같은 장점을 제공한다.
- 객체 간의 직접적인 통신을 방지하여, 객체 간의 의존성을 줄일 수 있다.
- 새로운 동료 객체를 추가하기 쉽다.
- 코드를 더 쉽게 유지보수하고, 확장할 수 있다.
객체 간 통신 제어 방법
미디에이터 패턴을 사용하면 객체 간 통신을 제어할 수 있다. 예를 들어, 대화 상자(Dialog)와 버튼(Button)이 있다고 가정해보자. 대화 상자(Dialog)는 버튼(Button)을 포함하고, 버튼(Button)은 대화 상자(Dialog)를 알고 있다.
이러한 경우, 대화 상자(Dialog)와 버튼(Button)은 서로 밀접하게 결합되어 있으며, 대화 상자(Dialog)를 변경하면 버튼(Button)도 변경해야 한다. 이러한 문제를 해결하기 위해 미디에이터 패턴을 사용할 수 있다.
미디에이터 패턴을 사용하면 대화 상자(Dialog)와 버튼(Button) 사이에 중재자(Mediator) 객체를 추가할 수 있다. 중재자 객체는 대화 상자(Dialog)와 버튼(Button) 사이의 통신을 중재한다.
이제 대화 상자(Dialog)나 버튼(Button)을 변경해도 다른 객체에 영향을 미치지 않는다. 대신, 중재자 객체에서 변경 사항을 처리하고, 다른 객체들에게 변경된 정보를 전달한다.
미디에이터 패턴을 사용하면 객체 간의 직접적인 통신을 방지하고, 코드를 더 쉽게 유지보수하고, 확장할 수 있다.
자바에서 미디에이터 패턴 활용하기
자바에서 미디에이터 패턴을 활용하려면, 다음과 같은 단계를 따라야 한다.
- 중재자(Mediator) 인터페이스를 정의한다.
public interface Mediator {
void send(String message, Colleague colleague);
}
- 동료(Colleague) 인터페이스를 정의한다.
public interface Colleague {
void receive(String message);
void setMediator(Mediator mediator);
}
- 중재자(Mediator) 클래스를 구현한다.
public class ConcreteMediator implements Mediator {
private List colleagues;
public ConcreteMediator() {
this.colleagues = new ArrayList();
}
public void addColleague(Colleague colleague) {
this.colleagues.add(colleague);
}
@Override
public void send(String message, Colleague colleague) {
for (Colleague c : colleagues) {
if (c != colleague) {
c.receive(message);
}
}
}
}
- 동료(Colleague) 클래스를 구현한다.
public class ConcreteColleague implements Colleague {
private Mediator mediator;
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
@Override
public void receive(String message) {
System.out.println("Received message: " + message);
}
public void send(String message) {
mediator.send(message, this);
}
}
- 클라이언트(Client) 클래스에서 중재자(Mediator)와 동료(Colleague) 객체를 생성하고, 중재자(Mediator) 객체에 동료(Colleague) 객체를 추가한다.
public class Client {
public static void main(String[] args) {
Mediator mediator = new ConcreteMediator();
Colleague colleague1 = new ConcreteColleague();
Colleague colleague2 = new ConcreteColleague();
Colleague colleague3 = new ConcreteColleague();
mediator.addColleague(colleague1);
mediator.addColleague(colleague2);
mediator.addColleague(colleague3);
colleague1.setMediator(mediator);
colleague2.setMediator(mediator);
colleague3.setMediator(mediator);
colleague1.send("Hello, World!");
}
}
위 코드에서는 Mediator 인터페이스와 Colleague 인터페이스를 정의하고, ConcreteMediator 클래스와 ConcreteColleague 클래스를 구현한다. 그런 다음, Client 클래스에서 중재자(Mediator)와 동료(Colleague) 객체를 생성하고, 중재자(Mediator) 객체에 동료(Colleague) 객체를 추가한다. 마지막으로, colleague1.send("Hello, World!") 코드를 실행하여 메시지를 보낸다.
결론
미디에이터 패턴은 객체 간 통신을 제어하는 데 사용되는 유용한 디자인 패턴이다. 이 패턴을 사용하면 객체 간의 직접적인 통신을 방지하고, 코드를 더 쉽게 유지보수하고, 확장할 수 있다.
자바에서 미디에이터 패턴을 사용하려면, 중재자(Mediator) 인터페이스와 동료(Colleague) 인터페이스를 정의하고, ConcreteMediator 클래스와 ConcreteColleague 클래스를 구현해야 한다. 그런 다음, 중재자(Mediator)와 동료(Colleague) 객체를 생성하고, 중재자(Mediator) 객체에 동료(Colleague) 객체를 추가한다. 마지막으로, 동료(Colleague) 객체에서 send() 메서드를 호출하여 메시지를 보낸다.