[ 목차 ]
이 글에서는 자바 디자인 패턴 중 미디에이터(Mediator) 패턴에 대해 알아볼 것입니다. 시작해 볼까요?
미디에이터 패턴이란?
먼저 미디에이터 패턴이 무엇인지 알아보도록 하죠. 이 패턴은 객체들 간의 복잡한 관계를 중재자(미디에이터)를 만들어 간소화하는 패턴입니다. 이를 통해 개별 객체들은 직접 서로를 참조하지 않고 중재자를 통해 서로 소통할 수 있게 됩니다.
어떻게 동작하나요?
미디에이터 패턴의 동작 방식을 살펴보겠습니다.
- 객체들은 미디에이터를 등록하며, 미디에이터는 각 객체를 알게 됩니다.
- 객체들은 서로 직접 참조하지 않고 미디에이터에 요청을 보냅니다.
- 미디에이터가 해당 요청을 처리하고, 적절한 객체에게 전달합니다. 필요하다면 상태 변경 또는 이벤트 발생 처리를 합니다.
미디에이터의 구현
미디에이터 패턴(Mediator Pattern)은 객체 간의 상호 작용을 중재하는 중간 객체인 '미디에이터'를 이용해 각 객체가 직접 참조하지 않고 상호 작용할 수 있도록 하는 디자인 패턴입니다. 이로 인해 객체 간의 결합도가 낮아지고 유지 관리가 쉬워집니다.
1. Mediator 인터페이스 생성
public interface Mediator {
void send(String message, Colleague colleague);
}
2. Colleague 클래스 생성
public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
public abstract void send(String message);
public abstract void notify(String message);
}
3. ConcreteColleague 클래스 생성
public class ConcreteColleague extends Colleague {
public ConcreteColleague(Mediator mediator) {
super(mediator);
}
@Override
public void send(String message) {
mediator.send(message, this);
}
@Override
public void notify(String message) {
System.out.println("Concrete Colleague received: " + message);
}
}
4. ConcreteMediator 클래스 생성
import java.util.ArrayList;
import java.util.List;
public class ConcreteMediator implements Mediator {
private List<Colleague> colleagues;
public ConcreteMediator() {
colleagues = new ArrayList<>();
}
public void addColleague(Colleague colleague) {
colleagues.add(colleague);
}
@Override
public void send(String message, Colleague originator) {
for (Colleague colleague : colleagues) {
if (colleague != originator) {
colleague.notify(message);
}
}
}
}
5. 미디에이터 패턴 사용
public class Main {
public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
ConcreteColleague colleague1 = new ConcreteColleague(mediator);
ConcreteColleague colleague2 = new ConcreteColleague(mediator);
mediator.addColleague(colleague1);
mediator.addColleague(colleague2);
colleague1.send("Hello, from Colleague1!");
colleague2.send("Hi, from Colleague2!");
}
}
미디에이터 패턴의 장점
이제 이 패턴을 사용하는 이유에 대해 알아봅시다.
- 객체 간의 의존성 감소: 객체들이 직접 참조하지 않음으로써 결합도를 줄이고 코드 수정 시 영향도를 낮춥니다.
- 유지보수 용이: 관계가 복잡하지 않고 중앙화되어있기 때문에 관련 로직 수정이 편해집니다.
- 재사용성 향상: 객체들이 느슨한 결합이기에 다른 시스템에서도 쉽게 사용할 수 있게 됩니다.
미디에이터 패턴의 단점
패턴의 사용에 있어 주의할 점들도 살펴보죠.
- 미디에이터 너무 복잡해질 수 있음: 객체 관계를 포괄하는 중재자가 복잡해지면 결국 관리가 어려워질 수 있습니다.
- 퍼포먼스 저하 위험: 모든 요청이 중앙에서 처리되기 때문에 성능이 저하될 수 있습니다. 최적화를 잘 신경 써야 합니다.
오늘은 미디에이터(Mediator) 패턴에 대해 알아보았습니다. 이 패턴은 객체들 간의 복잡한 관계를 단순화해 유지보수와 재사용성을 향상시키는데 유용한 패턴이지만, 몇 가지 단점을 잊지 말고 개발해야겠죠? 그럼 즐거운 코딩되세요!
2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴
2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴
2023.07.12 - [JAVA] - 디자인패턴 - 어댑터(Adapter) 패턴
2023.07.12 - [JAVA] - JAVA 디자인패턴 - 싱글톤(Singleton) 패턴
2023.07.13 - [JAVA] - JAVA 디자인패턴 - 옵저버(Observer) 패턴
2023.07.13 - [JAVA] - JAVA 디자인패턴 - 데코레이터(Decorator) 패턴
2023.07.14 - [JAVA] - JAVA 디자인패턴 - 프록시(Proxy) 패턴
2023.07.14 - [JAVA] - JAVA 디자인 패턴 - 커맨드(Command) 패턴
2023.07.15 - [JAVA] - JAVA 디자인패턴 - 스트래티지(Strategy) 패턴
2023.07.16 - [JAVA] - JAVA 디자인패턴 - 템플릿 메서드(Template Method) 패턴
2023.07.17 - [JAVA] - JAVA 디자인패턴 - 컴포지트(Composite) 패턴
2023.07.12 - [JAVA] - JAVA 디자인패턴 - 이터레이터(Iterator) 패턴의 정의, 사용 이유, 구현방법
2023.07.17 - [JAVA] - JAVA 디자인패턴 - 상태(State) 패턴의 정의, 구성요소, 구현, 장단점
2023.07.12 - [JAVA] - JAVA 디자인패턴 - 비지터(Visitor) 패턴의 정의, 장점, 구현
2023.07.17 - [JAVA] - JAVA 디자인패턴 - 퍼사드(Facade) 패턴의 정의, 장점, 구현
2023.07.17 - [JAVA] - JAVA 디자인패턴 - 체인 오브 리스폰시빌리티(Chain of Responsibility) 패턴의 정의, 장점, 구현
2023.07.17 - [JAVA] - JAVA 디자인패턴 - 빌더(Builder) 패턴 정의, 장점, 구현
2023.07.18 - [JAVA] - JAVA 디자인패턴 - 멀티턴(Multiton) 패턴의 정의 장점 구현
'JAVA' 카테고리의 다른 글
Java 아키텍처 패턴- MVP (Model-View-Presenter) 개념 장점 활용 (0) | 2023.07.20 |
---|---|
Java 아키텍처 패턴- MVC (Model-View-Controller) 개념 장점 활용 (0) | 2023.07.20 |
JAVA 디자인패턴 - 멀티턴(Multiton) 패턴의 정의 장점 구현 (0) | 2023.07.18 |
JAVA 디자인패턴 - 빌더(Builder) 패턴 정의, 장점, 구현 (0) | 2023.07.17 |
JAVA 디자인패턴 - 체인 오브 리스폰시빌리티(Chain of Responsibility) 패턴의 정의, 장점, 구현 (0) | 2023.07.17 |
댓글