![저작자표시-비영리-변경금지 88x31.png](https://licensebuttons.net/l/by-nc-nd/3.0/88x31.png)
1. 중재자 패턴(Mediator Pattern)
중재자 패턴은 객체들 간의 상호작용을 캡슐화하여 하나의 클래스에 위임하여 처리하는 패턴입니다. 객체 간의 직접적인 상호작용보다 중재자를 두어 간접적으로 상호작용 하도록 하는 것입니다. 이렇게 되면 컴포넌트 사이의 복잡한 M:N의 의존관계가 중재자와의 M:1의 의존관계가 되므로 결합도를 감소시킬 수 있게 됩니다.
![5tAhdYJfQ1rEXENdxm586dTjehLHhMzikAAAAAjmL6CgAAAOAwknIAAADAYSTlAAAAgMNIygEAAACHkZQDAAAADiMpBwAAABxGUg4AAAA4jKQcAAAAcBhJOQAAAOAwknIAAADAYSTlAAAAgMP+H4JfnDzRfRfhAAAAAElFTkSuQmCC](data:image/png;base64,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OQAAAICFkZQDAAAADiMpBwAAABxGUg4AAAA4jKQcAAAAcNhtO3fulMfjcbodgCvt3LnT6SbMi/4LJy22fxCncBJxinKwc+dOebgfortwSyYAALBW/O///q+++c1vqqenR7/3e7/ndHNcjekrANadzz//XC0tLfroo4+cbgpwyxDXcKPjx4/rzTff1Pe+9z2nm+J6JOUA1p3jx4/r3//939lJYE0hruE2n3/+ub7//e/r448/1t/93d/p448/drpJrsb0FZdh+gqwsv7nf/5Hmzdv1vXr1/V///d/unLliu69916nmwUsC3ENN/re976n//qv/9KFCxf05JNPauPGjfrud7/rdLNci6TcZUjKgZX13e9+V5cvX9b58+f1l3/5l/rSl75EZRFlj7iG23z++efavHmzhoeH9bWvfU1jY2N6+OGHlU6n9bu/+7tON8+VSMpdhqQcWDm/+c1vdN999+lnP/uZduzYof/8z//UH/zBH1BVRFkjruFG1oHiD3/4Q/l8PmUyGf31X/+1fD4f1fISSMpdhqQcWDkvvfSSEomEfvCDH9g7ib/5m7/Rhg0bqCqibBHXcBtrOtXrr7+urVu32nE5PT2tUCikK1euUC0vgqTcZUjKgZXxm9/8Rps3b9bPf/5z1dTU2DuJjz/+WL//+7+vK1eucLsulB3iGm700ksvaWJiQj/84Q8lST6fT1evXtWGDRv0rW99S1/60pf00ksvOdxK9yEpdxmScmBlfOc731EymdQPfvADSZLX69Unn3yiDRs26Nvf/janVFGWiGu4zewDRakwLt9//32q5SWQlLsMSTlw63322WfavHmzRkZG9PDDD0sq3EmkUik9+OCDVBVRVohruFH+dCpLflxKolpeAkm5y5CUA7fed77zHb333nv6p3/6J/ux2TsJqoooN8Q13Oazzz7TfffdV1All+bGpVUtT6fTCgQCTjXXdUjKXYakHLi1crmcNm/erDfffNOuJkpzdxJUFVFOiGu40eDgoH7+858XHChK0oYNG3Tt2jX9zu/8jv3Yt771LT388MN6+umnV7uZrkVS7jIk5cCt9aMf/Ug/+9nP9I//+I8FjxfbSXz7299WTU2NvvnNb652M4ElIa5RTorFJeYiKXcZknJgdbCTwFpEXMONiMvF+S2nGwAAAACsdyTlANYtj8fjdBOAW464htuYpklcLgJJOYB1iWliWIuIa6B8kZQDAAAADiMpBwAAABxGUg5gXWKOI9Yi4hpuRFwuDkk5AAAA4DCScgAAAMBhJOUAAABYMUxfWRyScgDrEjsJrEXENVC+SMoBAAAAh5GUAwAAAA4jKQewLvHLh1iLiGu4EdOqFoekHMC6xU4CaxFxDZQnknIAAADAYSTlAAAAgMNIygGsS8y9xVpEXMONmFO+OCTlANYtdhJYi4hroDyRlAMAAAAOIykHAADAimFa1eKQlANYl5jjiLWIuIZbEZcLIykHAAAAHEZSDgAAADiMpBzAusQcR6xFxDXciLhcHJJyAOsWcxyxFhHXcCPicmG3Od0AFPrt3/5tAhdYJfQ1rEXENdxm586dTjehLHhMzikAAAAAjmL6CgAAAOAwknIAAADAYSTlAAAAgMNIygEAAACHkZQDAAAADiMpBwAAABxGUg4AAAA4jKQcAAAAcBhJOQAAAOAwknIAAADAYSTlAAAAgMP+H4JfnDzRfRfhAAAAAElFTkSuQmCC)
Mediator는 BaseComponent와 상호작용하기 위한 인터페이스를 제공하며, ConcreteMediator는 이 인터페이스를 구현합니다. Component는 Mediator를 통해 다른 Component와 상호작용 할 수 있습니다.
예제 코드를 작성하겠습니다. 웹채팅을 하는 시나리오 입니다.
Mediator.java:
중재자 인터페이스 입니다. 유저를 추가하거나 제거하고, 각 유저에게 메시지를 보냅니다.
ConcreteMediator.java: ![qVfXY336n5AAAAAElFTkSuQmCC](data:image/png;base64,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uXuyEs7JTW9lxlG+f5vfbYHOXStez6dpP5iUFe3lhHVdc+rd2behzeuVpUS2jLBa80nPhFN+96337+B7GxZhefUQC+9bAbzm19GLiNxOA8LDw291pEJUVBSVlZU91Z47bn/dIWWDgxdCRxCxqjuCIemMLTu+JKH2XqatHxjopoiJ3n2t5BCXmtE8MSsuz84CDDPyfTD9Ds7cwL7nHqRGj30SkV5KI6T9QN76ENjgoOrIdfbOCWJtajFZSW3v32v/MTTSNdcpOXKJ0I86GIyqjwKizbUS6AZ5mJZkZ4FxBPQJf4JR8+/gilcPsTAKPYNURHo1jZAGeH8iIiIidzpNahIRERGRgFJAKiIiIiIBpYDUg9L1IiIiIreXAlIRERERCSgFpCIiIiISUHrsk6exBXz37HRuAlTsZcie3vZgGBEREZH+RSOknqqXMGh9BEPW72VQdAI3xwa6QSIiIiL9mwJSU0FwT6DbICIiItK/KSAVERERkYBSQCoiIiIiAaWA1Ku1DKiAW2NSAt0QERERkX5NAamJu4qPwUMvcH3DKU1uEhEREekheuyTVyncXDwdPn6JIYfyAt0YERERkX5LI6ReTYTgegacVDAqIiIi0pMUkIqIiIhIQCkgFREREZGAUkAqIiIiIgGlSU2ejO+yrzvG4OpAN0hERESkf1NA6ql6CYPW68SIiIiI3C5K2YuIiIhIQCkgFREREZGA6vUBaWVlZaCbICIiIiI9qNcHpCIiIiLSvykgFREREZGA6v2TyUds4o/WBxkO8PUBZn+sV3mKiIiI9Ce9f4S04UV++eZcZr95gPJ75/LbEYFukIiIiIh0p94fkLYyjFEKSEVERET6lT4WkIqIiIhIf6OAVEREREQCqg8FpHmc/BrCgn4e6IaIiIiISDfqQwEp7DzzKUzOoHjhAU1uEhEREeknev9jn5r9nN8+/CCcyWH2X94NdGNEREREpJv0oRFSC6NGXOPM1wpGRURERPqTPhSQioiIiEh/pIBURERERAJKAamIiIiIBFTvn9RkfJd9w6f8tiHQDRIRERGR7jQgPDz8VkcqREVFUVlZ2VPtEREREZE7jFL2IiIiIhJQCkhFREREJKA6nLIXEREREelOGiEVERERkYBSQCoiIiIiAdXxxz7NusaptZcJAqgcQ8SqId3eKBERERG5c3ThHtLrlBxpoHZLCEtKurdRIiIiInLn6GLKvolQS/c0RERERETuTLqHVEREREQCSgGpiIiIiARUFwLSIZRWQujYm93XGhERERG543RphHTt/tHw8NdUHXFQMKu7miQiIiIid5KOP/ap2U0Knr0MH91LxPqB3dciEREREbmjdGGE9DtCRw7li6MKRkVERESk8zSpSUREREQCSgGpiIiIiASUAlIRERERCaiuvcv+6mj+r14bKiIiIiJd0IV32YuIiIiIdJ1S9iIiIiISUApIRURERCSgOnwP6b//n38D4DeZ67q9MSIiIiJy59EIqYiIiIgEVKdfHdrU1NSd7RARERGRO5RGSEVEREQkoBSQioiIiEhAKSAVERERkYBSQCoiIiIiAaWAVEREREQCSgGpiIiIiASUAlIRERERCSgFpCIiIiISUApIRURERCSgFJCKiIiISED9f/qVfXY336n5AAAAAElFTkSuQmCC)
중재자 인터페이스를 구현한 클래스 입니다. 유저들을 관리하며, 각 유저들에게 메시지를 전송합니다.
Colleague.java:
유저를 추상화한 클래스 입니다. 중재자를 멤버변수로 가지며, 메시지를 전송하거나 수신받을 수 있습니다.
ConcreteColleague.java:
추상화된 유저 인터페이스를 구현한 클래스입니다. 메시지의 전송은 중재자에게 전송하는 것을 볼 수 있습니다.
Chat.java:
채팅을 하는 클래스입니다. 중재자와 각 유저들을 생성하고, user1 객체가 메시지를 전송하면 중재자를 통해 모든 유저들에게 메시지가 전송됨을 확인할 수 있습니다.
여기서는 로그를 통해서 모든 메시지가 출력되었지만, 실제로는 유저마다 메시지가 출력됩니다.
중재자 패턴은 하나의 중재자를 통해 M:1로 연결되어 있기 때문에 전체적인 연결 관계를 파악하기 쉬운 반면에 중재자가 특정 어플리케이션의 로직에 맞추어 만들어지기 때문에 재사용하기 어렵다는 단점이 있습니다.
2. 옵저버 패턴(Observer Pattern)
옵저버 패턴은 객체의 상태를 관찰하는 옵저버를 두어 변화가 있으면 종속된 객체들에게 통지하도록 하는 패턴입니다. 이전에 설명한 MQTT나 ROS의 통신 방식인 발행-구독 패턴(Publisher-Subscriber Pattern)과 유사합니다.
![R+cJ+Kzm0w0BAAAAABJRU5ErkJggg==](data:image/png;base64,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)
Subject는 발행자(Publisher)의 인터페이스이며, Observer에 의해 관찰됩니다. ConcreteSubject는 발행자를 구현한 클래스 입니다. Observer는 발행자의 상태를 관찰하는 옵저버 객체의 인터페이스이며, ConcreteObserver에 의해 구현됩니다. ConcreteObserver는 ConcreteSubject 객체에 대한 참조자를 관리합니다.
다수의 옵저버가 하나의 객체와 상호작용한다는 점에서 중재자 패턴과 유사해 보이지만, 중재자 패턴은 M개의 발행자(Publisher)와 N개의 구독자(Subscriber)가 서로서로 상태를 관찰하는 반면에 옵저버 패턴은 1개의 발행자(Publisher)에 대하여 N개의 구독자(Subscriber)가 상태를 관찰합니다. 다시 말해서 중재자 패턴은 양방향 통신을, 옵저버 패턴은 단방향 통신을 합니다.
예제 코드를 작성해 보겠습니다. 새로운 글이 작성되면 알림 메시지가 오는 시나리오 입니다.
Subject.java:
발행자 인터페이스 입니다.
ConcreteSubject.java:
발행자 인터페이스를 구현한 클래스 입니다. 옵저버들을 관리하며, 발행자의 상태를 알립니다.
Observer.java:
옵저버의 인터페이스 입니다.
ConcreteObserver.java:
옵저버 인터페이스를 구현한 클래스 입니다. 옵저버의 구분을 위해 name을 주었습니다.
Client.java:
클라이언트 클래스 입니다. 모델을 하나의 발행자로 생성하고, 다수의 뷰가 모델을 구독하는 형태입니다.
중재자 패턴과 마찬가지로 여기서는 모든 로그가 출력되지만, 실제로는 뷰마다 새로운 글에 대한 알림이 뜰 것입니다. 출력된 로그를 보면 3번째 글이 등록되기 전에 view2 객체가 구독취소를 했기 때문에 view2 객체에게는 3번째 글 등록 알림이 가지 않는 것을 확인할 수 있습니다.
옵저버 패턴은 위의 예제와 같이 MVC 패턴(Model-View-Controller Pattern)에서 사용하는 패턴입니다. 하나의 모델 상태를 다수의 View가 관찰하고 있다가 모델의 상태에 따라 각각 반응하게 됩니다.
자바에서는 내부적으로 옵저버 패턴을 구현할 수 있도록 Observer 인터페이스와 Observable 클래스를 제공하고 있습니다. |