들어가기에 앞서
https://www.patterns.dev/vanilla/mediator-pattern 에 있는 설명과 예시를 바탕으로 하여 관련 주제에 대해 이제까지 공부한 내용을 개인적으로 정리한 포스팅임을 밝힙니다.
- 컴포넌트들이 서로 직접 통신하는 대신 중재자 역할을 하는 객체를 통해 서로 통신하도록 한다.
- 중재자 객체가 요청을 받아 이를 필요로 하는 객체들에게 전달한다.
- 중재자는 보통 객체나 함수로 구현된다.
사용 예제) 채팅 앱
- 채팅 앱에서 사용자는 메시지를 서로 직접 주고 받지 않는다.
- 채팅 서버에 메시지를 전송하고, 서버가 각 사용자에게 메시지를 전달한다.
class ChatRoom {
logMessage(user, message) {
const time = new Date().toLocaleString()
const sender = user.getName();
console.log(`${time} [${sender}]: ${message}`);
}
}
class User {
constructor(name, chatroom) {
this.name = name;
this.chatroom = chatroom;
}
getName() {
return this.name;
}
send(message) {
this.chatroom.logMessage(this, message);
}
}
const chatroom = new ChatRoom();
const user1 = new User("John Doe", chatroom);
const user2 = new User("Jane Doe", chatroom);
user1.send("Hi there!");
user2.send("Hey!");
중개자 패턴의 핵심 아이디어는 중개되는 객체 수에 대해 중개자 클래스의 인스턴스(위의 예시에서 chatroom)가 하나만 있어야 한다는 것이다. 중개자 클래스는 객체 간 인터페이스 역할을 하며 객체에 대한 메소드 호출을 위임한다.
Express.js에서의 미들웨어 역시 이 패턴의 일종으로 볼 수 있다. 미들웨어는 요청과 응답 객체에 대한 중간 처리를 수행하고, 다음 미들웨어나 라우터로 요청을 전달한다.
장점
- 객체들이 서로 직접적으로 참조하거나 통신하지 않게 하여 결합도를 줄인다.
- 중앙에서 객체 간의 통신을 관리하고, 변경이 필요할 때 중개자만 수정하면 되므로 유지보수가 용이하다.
📚 참고자료
https://www.ramotion.com/blog/frontend-design-patterns
'배워서 남 주자' 카테고리의 다른 글
tanstack react-virtual을 사용하여 무한 스크롤 성능 최적화 하기 (1) | 2024.03.24 |
---|---|
디자인 패턴 - Command 패턴 (0) | 2024.01.22 |
디자인 패턴 - Observer 패턴 (0) | 2023.12.24 |
디자인 패턴 - Module 패턴 (0) | 2023.12.02 |
[TypeScript] VS Code에서 interface 형태를 바로 확인하는 방법 (0) | 2023.11.25 |