Your SlideShare is downloading. ×
GoF Mediator 패턴
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

GoF Mediator 패턴

4,871
views

Published on

스터디 2회, Mediator 발표자료

스터디 2회, Mediator 발표자료


0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,871
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 최범균 (madvirus@madvirus.net) blog: javacan.tistory.com
  • 2. 출처: http://www.thecityreview.com/f00ccon1.html
  • 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와 통신
  • 13. 객체간 메시지 흐름
  • 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로의 의존 제거
  • 19. 질문 있으세요?