-
행동(Behavioral) - 중재자(Mediator) 패턴Java/디자인패턴 2024. 11. 17. 21:01반응형
중재자(Mediator) 패턴
중재자(Mediator) 패턴은 행동(Behavioral) 패턴에 속합니다. 이 패턴은 객체 간의 복잡한 통신과 의존성을 줄이는 데 초점이 맞춰져 있습니다. 객체들이 서로 직접적으로 통신하는 대신, 중재자 객체를 통해 통신하게 하여 객체들 간의 결합도를 낮춥니다.
중재자 패턴의 특징
- 역할 분리:
- 객체들이 서로 직접 참조하거나 통신하지 않고, 중재자 객체가 중간에서 모든 상호작용을 관리합니다.
- 서로 의존성을 낮추고 독립적인 재사용 가능성을 높입니다.
- 확장성 증가:
- 객체의 추가나 변경이 중재자만 수정하면 되기 때문에 시스템 확장이 용이합니다.
- 복잡성 관리:
- 여러 객체 간의 통신을 단순화하고, 객체 간 의존 관계를 명확하게 제어합니다.
중재자 패턴 구조
- Mediator:
- 객체들 간의 의사소통을 담당하며 인터페이스 또는 추상 클래스로 정의됩니다.
- ConcreteMediator:
- Mediator 인터페이스를 구현하며, 객체들 간의 구체적인 상호작용을 정의합니다.
- Colleague:
- Mediator와 소통하는 객체입니다. 서로 직접적으로 통신하지 않으며, Mediator를 통해 통신합니다.
예제 코드 (JAVA)
1. 인터페이스 및 중재자 정의
// Mediator 인터페이스 interface Mediator { void sendMessage(String message, Colleague colleague); void addColleague(Colleague colleague); } // Colleague 추상 클래스 abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } public abstract void receiveMessage(String message); }
2. 구체적인 중재자 구현
import java.util.ArrayList; import java.util.List; class ConcreteMediator implements Mediator { private List<Colleague> colleagues = new ArrayList<>(); @Override public void sendMessage(String message, Colleague sender) { for (Colleague colleague : colleagues) { // 메시지를 보낸 Colleague는 제외 if (colleague != sender) { colleague.receiveMessage(message); } } } @Override public void addColleague(Colleague colleague) { colleagues.add(colleague); } }
3. Colleague 구현
class ConcreteColleague extends Colleague { private String name; public ConcreteColleague(Mediator mediator, String name) { super(mediator); this.name = name; mediator.addColleague(this); } public void send(String message) { System.out.println(name + " sends: " + message); mediator.sendMessage(message, this); } @Override public void receiveMessage(String message) { System.out.println(name + " received: " + message); } }
4. 사용 예시
public class MediatorPatternExample { public static void main(String[] args) { Mediator mediator = new ConcreteMediator(); Colleague colleague1 = new ConcreteColleague(mediator, "Colleague1"); Colleague colleague2 = new ConcreteColleague(mediator, "Colleague2"); Colleague colleague3 = new ConcreteColleague(mediator, "Colleague3"); colleague1.send("Hello, everyone!"); colleague2.send("Hi, Colleague1!"); colleague3.send("Good to see you all!"); } }
실행 결과
Colleague1 sends: Hello, everyone! Colleague2 received: Hello, everyone! Colleague3 received: Hello, everyone! Colleague2 sends: Hi, Colleague1! Colleague1 received: Hi, Colleague1! Colleague3 received: Hi, Colleague1! Colleague3 sends: Good to see you all! Colleague1 received: Good to see you all! Colleague2 received: Good to see you all!
장점
- 객체 간 결합도를 낮춤: 시스템의 모듈화와 유지보수성 증가.
- 중앙 집중화된 로직: 객체 간의 통신 로직을 한 곳에서 관리 가능.
단점
- 중재자 복잡도 증가: 중재자가 모든 로직을 담당하므로 복잡도가 높아질 수 있음.
- 단일 실패 지점: 중재자가 실패하면 시스템 전체에 영향을 미칠 수 있음.
반응형'Java > 디자인패턴' 카테고리의 다른 글
생성 패턴(Creational Pattern) - 빌더(Builder) 패턴 (0) 2024.11.19 행동(Behavioral) - 방문자(Visitor) 패턴 (0) 2024.11.18 생성(Creational) - 추상 팩토리(Abstract Factory) 패턴 (0) 2024.11.16 구조적(Structural) - 플라이웨이트(Flyweight) 패턴 (1) 2024.11.15 행동(Behavioral) - 관찰자(Observer) 패턴 (0) 2024.11.14 - 역할 분리: