[디자인 패턴] - Mediator
by 볼빵빵오춘기Mediator
객체들 간의 직접적인 상호작용을 피하고, 중재자(Mediator) 객체를 통해서만 통신하도록 만드는 디자인 패턴이다.
즉, 여러 객체들이 서로 직접 연락하지 않고 중앙의 중재자를 통해 소통하게 만들어서 결합도를 낮추는 패턴이다.
예시 코드
// 중재자 인터페이스
interface Mediator {
void sendMessage(String message, Colleague colleague);
}
// colleague 추상 클래스
abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator m) {
this.mediator = m;
}
}
// 실제 동작하는 colleague들
class User extends Colleague {
private String name;
public User(Mediator m, String name) {
super(m);
this.name = name;
}
public void send(String message) {
System.out.println(this.name + " 보내는 메시지: " + message);
mediator.sendMessage(message, this);
}
public void receive(String message) {
System.out.println(this.name + " 받은 메시지: " + message);
}
}
// 중재자 구현
class ChatMediator implements Mediator {
private List<User> users = new ArrayList<>();
public void addUser(User user) {
users.add(user);
}
@Override
public void sendMessage(String message, Colleague sender) {
for (User user : users) {
if (user != sender) {
user.receive(message);
}
}
}
}
// 클라이언트 코드
public class MediatorExample {
public static void main(String[] args) {
ChatMediator chat = new ChatMediator();
User user1 = new User(chat, "Alice");
User user2 = new User(chat, "Bob");
User user3 = new User(chat, "Charlie");
chat.addUser(user1);
chat.addUser(user2);
chat.addUser(user3);
user1.send("안녕하세요, 모두들!");
}
}
Mediator 패턴의 장점
객체 간 결합도 감소
컴포넌트들이 서로 직접 의존하지 않아 코드 간섭 줄어든다.
중앙집중식 제어
모든 로직을 중재자에게 집중시켜 구조 파악이 쉽다.
유지보수 용이
한 곳만 수정해도 여러 객체 간의 상호작용을 조절 가능하다.
객체 추가/변경에 유연
새 객체 추가 시 기존 객체 변경 없이 중재자만 조정하면 된다.
Mediator 패턴의 단점
중재자 클래스가 비대해짐
모든 제어 로직이 몰리면 중재자가 복잡하고 커질 수 있다.
디버깅 어려움
객체 간 간접 소통이 많아 흐름 추적이 어려울 수 있다.
작은 시스템엔 과한 설계
단순한 구조라면 오히려 복잡도를 증가시킬 수 있다.
Mediator 패턴은언제 사용하나?
여러 객체들이 복잡하게 연결되어 있을 때
채팅 앱에서 사용자, 메시지, 서버 등 각 요소가 연결될 때
객체 간의 상호작용을 단순화하고 싶을 때
UI 컴포넌트(버튼, 체크박스 등)의 이벤트 처리
객체 추가/변경 시 영향을 줄이고 싶을 때
새로운 컴포넌트를 추가해도 기존 코드 수정 없이 작동하게 하고 싶을 때
정리하자면
Mediator 패턴은 객체들 간의 직접적인 의존을 피하고, 중앙의 중재자를 통해서만 소통하게 하여 복잡도를 줄이는 구조이다.
'👩🏻💻 About 프로그래밍 > Spring, Spring boot' 카테고리의 다른 글
[디자인 패턴] - Observer (0) | 2025.04.09 |
---|---|
[디자인 패턴] - Memento (1) | 2025.04.09 |
[디자인 패턴] - Iterator (0) | 2025.04.09 |
[디자인 패턴] - Interpreter (1) | 2025.04.09 |
[디자인 패턴] - Command (0) | 2025.04.09 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기