최범균 (madvirus@madvirus.net)
  blog: javacan.tistory.com
출처: http://www.thecityreview.com/f00ccon1.html
최초 가입 폼
                      아이디를 입력하면
                        활성화 됨


                      중복확인
     아이디

     암호

    ...
최초 클래스 구조
                     IDInput                                     PasswordInput
     -submitButton : SubmissionBu...
코드
class IdInput {
   CheckDuplicationButton checkButton;

    void changed() {
       if (value.length > 0) {
           ...
기능이 추가된 가입 폼


       madvirus        중복확인
아이디

암호
                       중복확인이 되면
암호확인
                         활성화 됨
이메일...
기능 추가가 반영된 클래스
                                    IDInput                                PasswordInput
                  ...
신규 클래스∙객체 기능의 추가
                        → 객체간 커넥션 개수 증가




출처: http://www.flickr.com/photos/samuelhteer/767956429/sizes/...
클래스가 증가하면,,,



                          객체 간
기능이 다수의    재사용성    클래스
                          커넥션
클래스로 분산     향상    개수 증...
재사용이 어려워지는 시기 발생
                                                                IDInput                                Pa...
결국 거대한 한 놈(monolith)이 됨

                                          IDInput                               PasswordInput

재사...
해결안 - Mediator로 커뮤니케이션 추상화
     Mediator - 객체들 간의 교류를 제어하고 조정한다

                    id : Input                           ...
객체간 메시지 흐름
언제 쓸까?
• 많은 객체들이 복잡하게 얽혀 있어서
 – 구조나 동작 방식의 이해가 어려울 때
 – 객체의 재사용이 어려울 때


• 다수의 클래스에 분산된 기능을
 – 상속을 사용하지 않고 커스터마이징하고 싶을 때
Mediator 패턴의 구조 정리

    Mediator                        Colleague
                               -mediator : Mediator




...
적용 결과
• 기능 구현 및 협업 제어가 Mediator에 집중
  – 객체들이 어떻게 협업하는 지를 추상화
  – 협업 변경 필요시 Mediator만 변경/상속하면 됨
  – Mediator 복잡도 증가 → Media...
Mediator-Colleague 연동 구현 1
• Mediator에 수싞 전용 인터페이스 추가
                 Mediator                             Colleague
  +c...
Mediator-Colleague 연동 구현 2
• Observer 패턴을 이용
                          Colleague에서
                          Mediator로의
  ...
질문 있으세요?
Upcoming SlideShare
Loading in …5
×

GoF Mediator 패턴

5,614 views

Published on

스터디 2회, Mediator 발표자료

  • Be the first to comment

GoF Mediator 패턴

  1. 1. 최범균 (madvirus@madvirus.net) blog: javacan.tistory.com
  2. 2. 출처: http://www.thecityreview.com/f00ccon1.html
  3. 3. 최초 가입 폼 아이디를 입력하면 활성화 됨 중복확인 아이디 암호 암호확인 암호를 입력하면 활성화 됨 이메일 아이디, 암호, 이메일을 입력하면 가입 취소 활성화 됨
  4. 4. 최초 클래스 구조 IDInput PasswordInput -submitButton : SubmissionButton -submitButton : SubmissionButton -checkButton : CheckDuplicationButton -confirmationInput : PasswordConfirmationInput CheckDuplicationButton SubmissionButton PasswordConfirmationInput -checker : IdDuplicationChecker -submitButton : SubmissionButton CancelButton IdDuplicationChecker EmailInput -submitButton : SubmissionButton -submitButton : SubmissionButton
  5. 5. 코드 class IdInput { CheckDuplicationButton checkButton; void changed() { if (value.length > 0) { checkButton.enable(); } else { class CheckDuplicationButton { checkButton.disable(); IdDuplicationChecker checker; } } void onclick() { } checker.check(); } class IdDuplicationChecker { } SumissionButton submitButton; void check() { … submitButton.setCheckPassed(true); } }
  6. 6. 기능이 추가된 가입 폼 madvirus 중복확인 아이디 암호 중복확인이 되면 암호확인 활성화 됨 이메일 가입 취소
  7. 7. 기능 추가가 반영된 클래스 IDInput PasswordInput -submitButton : SubmissionButton -submitButton : SubmissionButton -checkButton : CheckDuplicationButton -confirmationInput : PasswordConfirmationInput CheckDuplicationButton SubmissionButton PasswordConfirmationInput -checker : IdDuplicationChecker -submitButton : SubmissionButton CancelButton IdDuplicationChecker -submitButton : SubmissionButton EmailInput -passwordInput : PasswordInput -submitButton : SubmissionButton -emailInput : EmailInput
  8. 8. 신규 클래스∙객체 기능의 추가 → 객체간 커넥션 개수 증가 출처: http://www.flickr.com/photos/samuelhteer/767956429/sizes/o/
  9. 9. 클래스가 증가하면,,, 객체 간 기능이 다수의 재사용성 클래스 커넥션 클래스로 분산 향상 개수 증가 증가
  10. 10. 재사용이 어려워지는 시기 발생 IDInput PasswordInput -submitButton : SubmissionButton -submitButton : SubmissionButton -checkButton : CheckDuplicationButton -confirmationInput : PasswordConfirmationInput CheckDuplicationButton SubmissionButton PasswordConfirmationInput -checker : IdDuplicationChecker -submitButton : SubmissionButton 난 Id 중복 검사 기능만 재사용하고 싶었을 CancelButton 뿐이고~ IdDuplicationChecker -submitButton : SubmissionButton EmailInput -passwordInput : PasswordInput -submitButton : SubmissionButton -emailInput : EmailInput 이미지 출처 http://bbs2.agora.media.daum.net/gaia/do/ kin/read?bbsId=K151&articleId=25003
  11. 11. 결국 거대한 한 놈(monolith)이 됨 IDInput PasswordInput 재사용 -submitButton : SubmissionButton -submitButton : SubmissionButton -checkButton : CheckDuplicationButton -confirmationInput : PasswordConfirmationInput CheckDuplicationButton SubmissionButton PasswordConfirmationInput -checker : IdDuplicationChecker -submitButton : SubmissionButton CancelButton IdDuplicationChecker -submitButton : SubmissionButton EmailInput -passwordInput : PasswordInput -submitButton : SubmissionButton -emailInput : EmailInput 변경 확장
  12. 12. 해결안 - Mediator로 커뮤니케이션 추상화 Mediator - 객체들 간의 교류를 제어하고 조정한다 id : Input duplicationCheckButton : Button password : Input submissionButton : Button : RegistrationDirector passwordConfirmation : Input cancelButton : Button email : Input : IdDuplicationChecker 각 Colleague들은 Mediator를 통해서 간접적으로 다른 Colleague와 통신
  13. 13. 객체간 메시지 흐름
  14. 14. 언제 쓸까? • 많은 객체들이 복잡하게 얽혀 있어서 – 구조나 동작 방식의 이해가 어려울 때 – 객체의 재사용이 어려울 때 • 다수의 클래스에 분산된 기능을 – 상속을 사용하지 않고 커스터마이징하고 싶을 때
  15. 15. Mediator 패턴의 구조 정리 Mediator Colleague -mediator : Mediator ConcreteMediator ConcreteColleague2 ConcreteColleague1
  16. 16. 적용 결과 • 기능 구현 및 협업 제어가 Mediator에 집중 – 객체들이 어떻게 협업하는 지를 추상화 – 협업 변경 필요시 Mediator만 변경/상속하면 됨 – Mediator 복잡도 증가 → Mediator 유지보수 문제 • Colleague 간 커플링 제거 – 다른 Colleague에 영향없이 Colleague의 재사용, 기 능 추가, 수정 가능 • 객체간 프로토콜이 m-n에서 1-n으로 단순화 – 이해, 유지보수, 확장이 쉬워짐
  17. 17. Mediator-Colleague 연동 구현 1 • Mediator에 수싞 전용 인터페이스 추가 Mediator Colleague +colleagueChanged(colleague : Colleague) ConcreteMediator Colleague1 Colleague2
  18. 18. Mediator-Colleague 연동 구현 2 • Observer 패턴을 이용 Colleague에서 Mediator로의 의존 제거
  19. 19. 질문 있으세요?

×