본문 바로가기
개발 관련 정보/디자인패턴

8.Command 패턴과 Mediator 패턴

by MonoSoft 2023. 3. 28.
728x90
반응형

Command 패턴과 Mediator 패턴

 

 

Command 패턴

command의 의미는 '명령어'이다. 

 

문서편집기의 복사(copy), 붙여넣기(paste), 잘라내기(cut) 등도 모두 명령어이다. 

그런데 이런 명령어를 각각 구현하는 것보다는 [그림 5-52]처럼 

하나의 추상 클래스에 execute() 메서드를 하나 만들고 각 명령이 들어오면 

그에 맞는 서브 클래스(copy_command)가 선택되어 실행하는 것이 효율적이다. 

 

이는 함수 오버로딩(overloading)과 같은 추상화 개념을 사용한 것이다.

그러나 command 패턴은 단순히 명령어를 추상 클래스(abstract class)와 

구체 클래스(copy_command, cut_command, paste_command)로 분리하여 

단순화한 것으로 끝나지 않고, 명령어에 따른 취소(undo) 기능까지도 

포함한다(사용자 입장에서는 해당 명령어를 실행했다가 취소(undo)하기도 하기 때문이다). 

 

이렇게 프로그램의 명령어를 구현할 때는 command 패턴을 활용할 수 있다.

 

 

Mediator 패턴

mediator는 '중재자', '조정자', '중개인'이란 뜻이다.

 

 

단어만 보아도 무엇을 하려는지 짐작할 수 있을 것이다.

mediator 패턴은 부동산 중개사, 비행기의 이착륙을 통제하는 관제탑,

중고 물건을 사고파는 사이트처럼 중간에서 연결하고 통제하는 역할을 한다.

 

객체지향 설계에서는 많은 객체가 존재하고 이들이 서로 관계를 맺으며 상호작용한다.

이때 객체의 수가 너무 많아지면 서로 통신하느라 복잡해져

객체지향에서 가장 중요한 느슨한 결합의 특성을 해칠 수 있다.

이를 해결하는 한 가지 방법은 중간에 이를 통제하고 지시할 수 있는

역할을 하는 중재자를 두는 것이다. 중재자에게 모든 것을 요구하여

통신의 빈도수를 줄여 객체지향의 목표를 달성하게 해주는 것이 바로 mediator 패턴이다.

 

그림 5-53 mediator 사용 전과 사용 후

 

[그림 5-54]를 보면 mediator는 모든 통신의 중계 역할을 하는 인터페이스 객체로서

객체(colleague)들 간의 교류를 제어하고 조정한다.

 

concreteColleague는 mediator와 통신하는 객체로서 이벤트가 발생했을 때 알리는 방법으로

colleague 인터페이스 객체를 사용한다.

여기서 각 colleague들는 mediator를 통하여 다른 colleague들과 통신한다.

 



728x90
반응형

'개발 관련 정보 > 디자인패턴' 카테고리의 다른 글

10.composite 패턴  (0) 2023.04.03
9.observer 패턴  (0) 2023.03.29
7. Immutable 패턴 / Flyweight 패턴  (0) 2023.03.27
6-2.Instance 패턴  (0) 2023.03.24
6-1.Singleton 패턴  (0) 2023.03.22

댓글