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


                      중복확인
     아이디

     암호

     암호확인             암호를 입력하면
                        활성화 됨
     이메일


 아이디, 암호,
이메일을 입력하면
            가입   취소
  활성화 됨
최초 클래스 구조
                     IDInput                                     PasswordInput
     -submitButton : SubmissionButton             -submitButton : SubmissionButton
     -checkButton : CheckDuplicationButton        -confirmationInput : PasswordConfirmationInput




   CheckDuplicationButton               SubmissionButton            PasswordConfirmationInput
-checker : IdDuplicationChecker                                  -submitButton : SubmissionButton



                                                                                     CancelButton




               IdDuplicationChecker                          EmailInput
        -submitButton : SubmissionButton          -submitButton : SubmissionButton
코드
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);
                                                        }
                                                    }
기능이 추가된 가입 폼


       madvirus        중복확인
아이디

암호
                       중복확인이 되면
암호확인
                         활성화 됨
이메일




          가입      취소
기능 추가가 반영된 클래스
                                    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
신규 클래스∙객체 기능의 추가
                        → 객체간 커넥션 개수 증가




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



                          객체 간
기능이 다수의    재사용성    클래스
                          커넥션
클래스로 분산     향상    개수 증가
                           증가
재사용이 어려워지는 시기 발생
                                                                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
결국 거대한 한 놈(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




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

                    id : Input                               duplicationCheckButton : Button




        password : Input
                                                                     submissionButton : Button



                                    : RegistrationDirector
  passwordConfirmation : Input
                                                                       cancelButton : Button




                    email : Input                              : IdDuplicationChecker




                   각 Colleague들은 Mediator를 통해서
                    간접적으로 다른 Colleague와 통신
객체간 메시지 흐름
언제 쓸까?
• 많은 객체들이 복잡하게 얽혀 있어서
 – 구조나 동작 방식의 이해가 어려울 때
 – 객체의 재사용이 어려울 때


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

    Mediator                        Colleague
                               -mediator : Mediator




ConcreteMediator   ConcreteColleague2        ConcreteColleague1
적용 결과
• 기능 구현 및 협업 제어가 Mediator에 집중
  – 객체들이 어떻게 협업하는 지를 추상화
  – 협업 변경 필요시 Mediator만 변경/상속하면 됨
  – Mediator 복잡도 증가 → Mediator 유지보수 문제
• Colleague 간 커플링 제거
  – 다른 Colleague에 영향없이 Colleague의 재사용, 기
    능 추가, 수정 가능
• 객체간 프로토콜이 m-n에서 1-n으로 단순화
  – 이해, 유지보수, 확장이 쉬워짐
Mediator-Colleague 연동 구현 1
• Mediator에 수싞 전용 인터페이스 추가
                 Mediator                             Colleague
  +colleagueChanged(colleague : Colleague)




          ConcreteMediator                   Colleague1       Colleague2
Mediator-Colleague 연동 구현 2
• Observer 패턴을 이용
                          Colleague에서
                          Mediator로의
                            의존 제거
질문 있으세요?

More Related Content

More from beom kyun choi

ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
beom kyun choi
 

More from beom kyun choi (20)

keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
 
DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
 
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)
 
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회
 

GoF Mediator 패턴

  • 1. 최범균 (madvirus@madvirus.net) blog: javacan.tistory.com
  • 3. 최초 가입 폼 아이디를 입력하면 활성화 됨 중복확인 아이디 암호 암호확인 암호를 입력하면 활성화 됨 이메일 아이디, 암호, 이메일을 입력하면 가입 취소 활성화 됨
  • 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. 코드 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. 기능이 추가된 가입 폼 madvirus 중복확인 아이디 암호 중복확인이 되면 암호확인 활성화 됨 이메일 가입 취소
  • 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. 신규 클래스∙객체 기능의 추가 → 객체간 커넥션 개수 증가 출처: http://www.flickr.com/photos/samuelhteer/767956429/sizes/o/
  • 9. 클래스가 증가하면,,, 객체 간 기능이 다수의 재사용성 클래스 커넥션 클래스로 분산 향상 개수 증가 증가
  • 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. 결국 거대한 한 놈(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. 해결안 - Mediator로 커뮤니케이션 추상화 Mediator - 객체들 간의 교류를 제어하고 조정한다 id : Input duplicationCheckButton : Button password : Input submissionButton : Button : RegistrationDirector passwordConfirmation : Input cancelButton : Button email : Input : IdDuplicationChecker 각 Colleague들은 Mediator를 통해서 간접적으로 다른 Colleague와 통신
  • 14. 언제 쓸까? • 많은 객체들이 복잡하게 얽혀 있어서 – 구조나 동작 방식의 이해가 어려울 때 – 객체의 재사용이 어려울 때 • 다수의 클래스에 분산된 기능을 – 상속을 사용하지 않고 커스터마이징하고 싶을 때
  • 15. Mediator 패턴의 구조 정리 Mediator Colleague -mediator : Mediator ConcreteMediator ConcreteColleague2 ConcreteColleague1
  • 16. 적용 결과 • 기능 구현 및 협업 제어가 Mediator에 집중 – 객체들이 어떻게 협업하는 지를 추상화 – 협업 변경 필요시 Mediator만 변경/상속하면 됨 – Mediator 복잡도 증가 → Mediator 유지보수 문제 • Colleague 간 커플링 제거 – 다른 Colleague에 영향없이 Colleague의 재사용, 기 능 추가, 수정 가능 • 객체간 프로토콜이 m-n에서 1-n으로 단순화 – 이해, 유지보수, 확장이 쉬워짐
  • 17. Mediator-Colleague 연동 구현 1 • Mediator에 수싞 전용 인터페이스 추가 Mediator Colleague +colleagueChanged(colleague : Colleague) ConcreteMediator Colleague1 Colleague2
  • 18. Mediator-Colleague 연동 구현 2 • Observer 패턴을 이용 Colleague에서 Mediator로의 의존 제거