본문 바로가기
디자인패턴

미디에이터 패턴

by gamedevlab 2025. 5. 11.

메디에이터 패턴은 중재자 라는 뜻의 패턴인데 복잡한 관계를 싹 정리하는 클래스로 모아 관리하는 패턴이다.

스위치 분기가 있고, 스위치에 맞게 뭐 어떤 함수를 호출하거나 어떤 클래스를 호출한다고 하자

 

이렇게 될 텐데, 마치 하나의 인풋을 여러개로 분기해 주는 역할을 맡는 것 같아 지금은 괜찮아 보인다. 인풋이 하나이기 때문에 아날로그회로의 디코더를 떠올릴 수도 있겠다. 인풋이 int 하나이면 위와 같은데

좀더 논리회로와 매치되도록 bool변수 여럿을 인풋으로 받는다고 해보자

모시깽이 isOn,inOpen,isEmpry 세개가 있다고 하자. 얘는 상자고, 상자의 상태가 On이어야 이후 행동을 하고, 오픈이 False일때 오픈을 하고, 오픈이 되었으면 이제 Empty가 False일때 플레이어한테 아이템을 준다.

온일때, 오픈일때, 엠티일때 → 일단 온일때 나머지 실행, 오픈이면? ~엠티일때 아이템 주기, ~오픈이면? 열기. 나머지는 실행을 안한다고 하면, 단순히 두 가지 연산을 위해서 아래와 같아짐

 

일종의 디코더인 셈인데, 모든 분기를 하지 않았으니까 디코더보다는 하드코딩된 멀티플렉서가 되어버리는데, 어디서 많이 봤다. 플래시메모리 ROM이다.

에칭해버려서 딱 분기 정해놓은 반도체. 이렇게 해놓고 아래 스위치문에서 그 결과를 토대로 또 다른 연산을 한다면??

 

단순히 세가지 분기하는데도 이렇게 복잡하고, 실수로 위의 인풋스위치노드를 다른 곳에서 조작할 위험도 있고 막 복잡해진다.

 

어떻게 할까? 이럴때 그냥 선정리 해주는것. 메디에이터-중재자. 일종의 멀티탭 박스 만들어주는것. 앞단에서는 그냥 인코더 역할만 해주고, 메디에이터에 던져주면 그 안에서 디코드해서 다른 곳으로 특정해줌.

 

정말 말그대로 선정리함. 중재자이다.

건물마다 있는 전화선박스 생각하면 편하다. 옛날에 전화걸면 중재자인 전화안내원을 통해 매칭이 됐듯이 그거임

 

중재자가 없다면?

저 수십 수백개의 아웃풋을 변수를 받는 곳에서 직접 일일히 조작??

가독성이 너무 떨어지는건 그렇다고 치자. 뭐 #region으로 감추면 되니까.

실수 안 할 자신이 있는지?

스크롤 너무 길어지는건?

ctrl+F해서 isOpen 한 40번 나오는데, 매번 그거 찾아서 수정할때 안힘들까?

협업은? 386번 줄의 모시깽이랑, 834번 줄의 뭐뭐 수정해주세요 하고 요청했을때 믿을 수 있는지?

 

그러니까 대충 스위치가 복잡한데? 싶으면 메디에이터 패턴 써서 캡슐화 하자.

단순히 두세개 분기하는데 메디에이터 쓰면 오히려 불편하다

 ex)

핸드폰 usb 충전하는게 목표.

충전기 용도별 구분(데이터, 충전, 데이터+충전) 이라고 적힌 박스 안에…

충전기 핀타입 구분(5핀,c타입,라이트닝) 이라는 박스 안에 …

충전기 와트별 구분(5W,10W,15W,30W,45W,삼성pd60W,etc…)박스 안에…???

 

이렇게 닭잡는데 소잡는칼 쓰게 되는 경우가 되는 경우가 많기 때문. 제일 패턴병 걸리기 쉬운 패턴임

충전기 한두개 넣어두면 그거 만질때마다 여느라 오히려 귀찮으니까 대충 5~8개 넘어가는 스위치에만 쓰자.

보기싫은거랑 길어지는거 실수하는거 방지하는 용도가 제일 크다.

 

 
 

 

'디자인패턴' 카테고리의 다른 글

비지터 패턴  (0) 2025.05.11
플라이웨이트 패턴  (0) 2025.05.11
파사드 패턴  (0) 2025.05.11
어댑터 패턴  (0) 2025.05.11
커맨드 패턴  (0) 2025.05.11