miss_pattern_v2
Upcoming SlideShare
Loading in...5
×
 

miss_pattern_v2

on

  • 2,317 views

miss pattern v2

miss pattern v2

Statistics

Views

Total Views
2,317
Views on SlideShare
2,144
Embed Views
173

Actions

Likes
1
Downloads
42
Comments
0

3 Embeds 173

http://arload.wordpress.com 160
http://www.hanrss.com 12
file:// 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

miss_pattern_v2 miss_pattern_v2 Presentation Transcript

  • 미워도 다시 보는 패턴 이야기.
  • 손영수 arload@live.com EvaCast 리더 http://www.evacast.net 데브피아 아키텍쳐 시삽 Blog - 아키텍트로 가는 길. http://www.arload.net
  • 오늘 나눌 이야기 거리들.  패턴의 정의 (패턴이란?)  패턴에 대핚 오해와 짂실  패턴으로 가는 길  패턴 구성요소 바로 알기  패턴의 올바른 학습 가이드라인
  • 1. 도대체.. 패턴은 무엇일까?
  • Pattern is Father
  • 우리는 아버지와 비슷한 생김새, 성격, 습관 등을 가지고 있다.
  • 이미 해결한 문제와 유사한 문제들은.. 유사한 방법(패턴)으로 해결 할 수 있다.
  • 그럼 패턴은 과연.. 왜 내가 적용하려면 안될까?
  • 2. 패턴에 대한 오해와 진실
  • GoF 23개의 Pattern으로 우아한 프로그램 만들기?
  • 지구상의 패턴들.. + 논문 형태로 발표된 패턴 몇 백개.
  • 패턴은 섬이 아니다.
  • 여러 개의 패턴이 뭉쳐서 움직인다. Strategy Common Variable Part <<CREATES>> Part Factory (Modularity) Log <<LINKS>> Security Configurable Part Component Transaction Configurator
  • 여러 개의 패턴이 뭉쳐서 움직인다.
  • 패턴은 소프트웨어 설계 쪽만 다룬다?
  • 솔로들을 위한 패턴? http://www.amazon.com/Dating-Design-Patterns-Solveig-Haugland/dp/0974312002/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1239125189&sr=8-1
  • 조직을 변화시키는 패턴. 새로운 생각을 조직에 전파하는 48가지의 패턴과 패턴 언어들. Linda Rising과 Fearless Change 책 소개 – http://arload.wordpress.com/2009/09/18/plop-linda-rising-fearless-change/
  • 소프트웨어 관련된 모든 행위들을 다룬다.  팀을 이루어 설계 대련을 수행하는 패턴  + http://portal.acm.org/citation.cfm?id=273484  팀 생산성을 향상 시키는 패턴  http://arload.wordpress.com/2008/09/02/teamproductivity/ 그 외에도 기타 등등….  지리적으로 떨어져 있는 팀 협업하는 패턴  http://hillside.net/plop/2006/Papers/Library/patternstoenablePLoP2006_sub mission_v4.pdf http://arload.wordpress.com/2008/04/02/plopfestival/  http://hillside.net/plop/2004/papers/vbricout0/PLoP2004_vbricout0_0.doc  효율적인 회의를 이끄는 패턴  http://hillside.net/europlop/europlop2005/workshops/
  • 패턴은 만병통치약?
  •  비약적인 성능 향상 ?  생산성 증대 ?  최적화 ?  심지어 Silver Bullet ??
  • 패턴의 장점은.. 유연성 확장성
  • 3. 패턴으로 가는 길...
  • 패턴에 대한 올바른 마음가짐
  • 아키텍쳐의 이해 대상 Martin Fowler says … The expert developers working on that project have a shared understanding of the system design. This shared understanding is called ‘architecture’ http://www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
  • 역시 패턴도.. 팀 내 의사 소통의 수단이 되기 위해선, 팀원들의 이해가 필요하다.
  • 선무당이 사람 잡는다. 해당 그림 추가
  • 패턴의 남용. 리소스 제약이 심한 시스템에 유연성 추가하기?? - Pipe & Filter - Component Configurator
  • 패턴의 가족관계를 찾아라!
  • Compound Pattern versus Composite Pattern
  • 전형적인 가족관계 Strategy Common Variable Part <<CREATES>> Part Factory Log <<LINKS>> Security Configurable Part Component Transaction Configurator
  • 여러분을 위해 하나씩 나누어 설명드리겠습니다.
  • Strategy 인공위성과 슈퍼 컴퓨터의 정렬 로직은 같을까요? satellite Super Computer
  • Strategy void main() ISort { //pSort라는 인터페이스를 선언핚다 ISort iSort; +Sorting() if (GetSystemInfo() == Low) { //인공위성에서는 Bubble Sorting 사용 iSort = new CBubble(); } else { Bubble Quick //슈퍼 컴퓨터에는 Quick Sorting 사용 iSort = new CQuick(); } iSort.Sorting(); +Sorting() +Sorting() }
  • Template Method Application ODBC(JDBC) API ODBC (JDBC) Driver Manager MSSQL Driver Oracle Driver
  • Template Method Class QueryTemplate { public void doQuery() QueryTemplate { string dbCommand; dbCommand = FormatConnect(); +doQuery() dbCommand = FormantSelect(sql); #FormatConnect() } ... #FormatSelect() } void main() { //pQT라는 인터페이스를 선언핚다 Inversion of Control QueryTemplate QT; Sql sql = “select * from AA”; (Hollywood Principle) if (GetDBProductInfo() = Oracle) QT = new OracleQT(); else OracleQT SqlSvrQT QT = new SqlSvrQT(); Qt->doQuery(sql); #FormatConnect() #FormatConnect() } #FormatSelect() #FormatSelect()
  • Component Configurator 설정 파일 정보가 바뀌면 소프트웨어의 코드 수정없이 속성이 변경되어라!! Text Based XML Log Component DES RSA Configuration HTTP FTP Protocol File Protocol Great Architect
  • Component Configurator Component Component Repository +Init() +Fini() +Suspend() +Resume() Component +Info() Configurator Core Core Component Component 38
  • Component Configurator void main() <xml version =“1.0”> { <Components> <!– Protocol 정보 선택 --> IMessage iMessage = new Message(); <Protocol> HTTP if (GetComponentInfo(“Protocol”) = HTTP) iMessage->Protocol = HTTP; </Protocol> else iMessage->Protocol = FTP; <!– Log 정보 선택 --> <Log> if (GetComponentInfo(“Log”) = XML) XML iMessage->Protocol = XML; </Log> else iMessage->Protocol = TEXT; <!– 보안 알고리즘 선택 --> Advanced Topic <SecuAlgorithm> Reflection ... DES </SecuAltorithm> iMessage->Send(“Hello”);} </Components> Devpia A&D EVA 10/20/2009 39
  • Reflection Meta Level further meta-level modifies components MetaObject A MetaObject B MOP modifies retrieves information uses uses uses uses Component A further Component B UserInterface base-level provides components access to Base Level
  • Reflection ModuleBuilder AssemblyModule = CreatedAssembly.DefineDynamicModule("MathModule","Math.dll"); TypeBuilder MathType = AssemblyModule.DefineType("DoMath", TypeAttributes.Public | TypeAttributes.Class); System.Type [] ParamTypes = new Type[] {typeof(int),typeof(int) }; MethodBuilder SumMethod = MathType.DefineMethod("Sum", MethodAttributes.Public, typeof(int), ParamTypes); ParameterBuilder Param1 = SumMethod.DefineParameter(1,ParameterAttributes.In, "num1"); ParameterBuilder Param2 = SumMethod.DefineParameter(1,ParameterAttributes.In, "num2"); . . . MathType.CreateType(); return CreatedAssembly;
  • Reflection using System; using System.Reflection; ... public class EmitDemoTest { static void Main() { ... System.Type MathType = EmitAssembly.GetType("DoMath"); object[] Parameters = new object [2]; Parameters[0] = (object) (5); Parameters[1] = (object) (9); object EmitObj = Activator.CreateInstance (MathType,false); object Result = MathType.InvokeMember("Sum", BindingFlags.InvokeMethod ,null,EmitObj,Parameters); Console.WriteLine("Sum of {0}+{1} is {2}", Parameters[0],Parameters[1],Result.ToString()); Console.ReadLine(); } }
  • 다시 보는 가족 관계 Strategy Variable Common Part <<CREATES>> Part Factory Log <<LINKS>> Security Configurable Part Component Transaction Configurator
  • 패턴 가족 이야기 2
  • 스타에서의 Observer Change Data 1. Observation Starcraft 때문에 생긴 오해!! 2. Notification Devpia A&D EVA 10/20/2009 45
  • 패턴에 있는 Observer는 통보 받는 자(Notifieer)이다.
  • Hollywood Principle Don’t Call us!! Manager Applicants
  • Hollywood Principle Don’t Call us! We Call You!!! Manager Applicants
  • 정확한 Observer Change 1. Change 2. Change Data Manager Client (Source) 3. Notification Observer is Notifieer Client (Type1) Client (Type2) Client (Type3)
  • Observer Subject Observer +Attach (Observer o) +Update () +Detach (Observer o) +Notify() Concrete Concrete Subject Observer
  • 패턴 가족 이야기 2 Get Info Change Handler Load Config File Notifiy Client A Overhead!! Configuration File App.config File I/O Web.config Client B
  • 패턴 가족 이야기 2 Get Info Change Handler Load Config File Notifiy Client A FileSystemWatcher .NotifyFilter Configuration File App.config Web.config A Smart Developer
  • 패턴 가족 이야기 3
  • 무거운 의존관계.
  • 무거운 (Heavy Dependency) 상황 // your API public class Tracer { MessageQueue mq = new MessageQueue(…); public void Trace(string message){ mq.Send(message); } } // your customer’s program that is hard to test Tracer tracer = new Tracer(); public void ProcessOrder(Order order){ tracer.Trace(order.Id); … }
  • Inversion of Control // your better API public abstract class TraceListener { public abstract void Trace(string message); } public class Tracer { TraceListener listener; Template Method public Tracer(TraceListener listener){ & this.listener = listener; } Publisher/Subscriber public void Trace(string message){ listener.Trace(message); } }
  • Dependency Injection // your customer’s program that is easier to test Tracer tracer = new Tracer(new FileListener()); public void ProcessOrder(Order order){ tracer.Trace(order.Id); … }
  • Dependency Injection Container // customer’s program that is even easier to test Tracer tracer = container.Resolve<Tracer>(); public void ProcessOrder(Order order){ tracer.Trace(order.Id); … } Check out DI Containers (a.k.a. IoC Containers): autofac, Castle Windsor, PicoContainer.NET, Spring.NET, StructureMap, Unity, nInject and others. http://www.nInject.org http://www.springframework.net/
  • 많은 가족관계 (Compound Pattern) 사례를 알아야.. 실제 설계 시 적용하기 쉽다.
  • 패턴과 SoC (Separation of Concerns)
  • SoC is "focusing one's attention upon some aspect”
  • 결국 패턴은 복잡한 문제를 잘 SoC 하는 경험들을 모아놓은 산물..
  • JAWS - 웹 서버의 복잡한 문제를 잘 SoC한 사례 패턴을 이용한 웹 서버 만들기 (한국어 강좌) http://www.devpia.com/NET2/EvaCast/Lecture/?cu=view&r=11
  • 하지만 현실에는.. 유연성에만 초점을 맞추어 SoC 할 수 없다. 분산 객체 사례.. CORBA, Web Service..
  • 4. 패턴 구성요소 바로 알기
  • 패턴의 구성요소(Components)  Name / Aliases  Solution  Context  Consequences  Forces  Known Use  Problem  Related Pattern
  • 패턴에서 가장 중요시 봐 야 할 구성요소는..
  • 어머니의 재미난 조언..
  • 길고 짧은 건 못 올라갈 대봐야 나무는 안다. 쳐다 보지 말아라
  • 해결책 (조언)은 알았는데.. 언제 이 조언을 사용하지?
  • 어머니의 조언에서 빠진 것은? Context
  • 결과보다 어떤 상황에서 이 패턴을 적용하는지 아는 것이 중요.
  • 또 중요한 것 하나! Resulting Context
  • 패턴 적용 시, 발생하는 단점과 Side Effect를 주의 깊게 살펴보기
  • 문제가 뭐야!! Problem
  • 현재 내가 처한 문제가 무엇인지.. 제대로 알아야 패턴을 써 먹지.
  • 실 사례를 살펴봐라 Known Use.
  • Known Use를 통해 실패와 성공의 이야기를 들어라
  • 패턴의 확장된 구성요소(Components)  Name / Aliases  Side Effect  Context  Rationale  Forces  Known Use  Problem  Related Pattern  Solution  Sketch  Resulting Context  References
  • 구성요소들에 대한 재미난 이야기들은.. 각각의 구성요소에 대한 자세한 설명 – 확장된 PLoP 패턴 구성 요소들 http://arload.wordpress.com/2009/09/03/plop-pattern-template/ 추가된 구성 요소의 유래 – Linda Rising의 패턴 만드는 법 http://arload.wordpress.com/2009/10/09/fearless-change-2-strategies-or-pattern/
  • 5. 패턴의 올바른 학습 가이드라인.
  • 초보를 위한 패턴 빌드오더.. Devpia A&D EVA 10/20/2009 82
  • POSA 1 (아키텍쳐 패턴)  Layer  Model -View-Controller  Pipe & Filter  Presentation -Abstraction - Control  Broker  Reflection  Master Slave  Client – Dispatcher  Counted Pointer  Forwarder-Receiver  Blackboard
  • POSA 2 (분산 객체를 위한 패턴)
  • POSA 3 (자원 관리를 위한 패턴)  Resource Acquisition  Resource Lifecycle  Lookup  Caching  Lazy Acquisition  Pooling  Eager Acquisition  Coordinator  Partial Acquisition  Resource Lifecycle Manager  Resource Release  Leasing  Evictor Devpia A&D EVA 10/20/2009 85
  • 그 외 패턴들.. Devpia A&D EVA 10/20/2009 86
  • 그 외 패턴들.. Devpia A&D EVA 10/20/2009 87
  • 그 외 패턴들.. Devpia A&D EVA 10/20/2009 88
  • References  Frank Buschmann et al, “Pattern-Oriented Software Architecture : A System of Patterns”, Volume 1, Wiley  Douglas Schmidt et al, “Pattern-Oriented Software Architecture”, Volume 2, Wiley  Eric Gamma et al, “Design Patterns : Elements of Reusable Object Oriented Software” , Addison Wesley  Pipe & Filter Pattern, http://www.codeproject.com/cs/design/PipesAndFilters.asp  Reflection Pattern, http://www.codeproject.com/csharp/introreflection.asp
  • References  FileSystemWatcher.NotifyFilter http://msdn2.microsoft.com/en- us/library/system.io.filesystemwatcher.notifyfilter(VS.80).aspx  Pattern Language of Program Design http://www.hillside.net  그 외의 패턴 이야기 (나의 블로그 ..) http://www.arload.net or http://arload.wordpress.com  소프트웨어 공학 커뮤니티 80개의 무료 강좌들- EvaCast http://www.evacast.net