misspattern
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

misspattern

on

  • 3,156 views

 

Statistics

Views

Total Views
3,156
Views on SlideShare
2,674
Embed Views
482

Actions

Likes
2
Downloads
47
Comments
0

7 Embeds 482

http://arload.wordpress.com 468
http://www.hanrss.com 8
file:// 2
http://www.slideshare.net 1
url_unknown 1
http://183.177.70.16 1
http://localhost 1
More...

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

misspattern Presentation Transcript

  • 1. 미워도 다시 보는 이야기. 패턴 이야기.
  • 2. 손영수 arload@live.com EvaCast 리더 http://www.evacast.net 데브피아 아키텍쳐 시삽 Blog - 아키텍트로 가는 길. http://www.arload.net
  • 3. 오늘 나눌 이야기 거리들. § 패턴의 정의 (패턴이란?) § 패턴에 대한 오해와 진실 § 패턴으로 가는 길 § 패턴 빌드 오더 § 패턴 + 생산성 두 마리 토끼 잡기
  • 4. 1. 도대체.. 패턴은 무엇일까?
  • 5. Pattern is Father
  • 6. 우리는 아버지와 비슷한 생김새, 성격, 습관 등을 가지고 있다.
  • 7. 이미 해결한 문제와 유사한 문제들은.. 유사한 방법(패턴)으로 해결 할 수 있다.
  • 8. 그럼 패턴은 과연.. 내가 왜 적용하려면 안될까?
  • 9. 2. 패턴에 대한 오해와 진실
  • 10. GoF 23개의 Pattern으로 우아한 프로그램 만들기?
  • 11. 지구상의 패턴들.. + 논문 형태로 발표된 패턴 몇 백개.
  • 12. 패턴은 섬이 아니다.
  • 13. 여러 개의 패턴이 뭉쳐서 움직인다. Common Strategy Part Variable <<CREATES>> Part (Modularity) Factory Log Security <<LINKS>> Configurable Part Component Transaction Configurator
  • 14. 여러 개의 패턴이 뭉쳐서 움직인다.
  • 15. 패턴은 소프트웨어 설계 쪽만 다룬다?
  • 16. 솔로들을 위한 패턴? 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
  • 17. 소프트웨어 관련된 모든 행위들을 다룬다. § 팀을 이루어 설계 대련을 수행하는 패턴 + œ 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/
  • 18. 패턴은 만병통치약?
  • 19. §비약적인 성능 향상 ? §생산성 증대 ? §최적화 ? §심지어 Silver Bullet ??
  • 20. 패턴의 장점은.. 유연성 확장성
  • 21. 3. 패턴으로 가는 길...
  • 22. 패턴에 대한 올바른 마음가짐
  • 23. 아키텍쳐의 이해 대상 Martin Fowler says … The expert developers working on that project have a shared understanding of the system design. This shared understanding is called ‘architecture architecture’ architecture http://www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
  • 24. 역시 패턴도.. 팀 내 의사 소통의 수단이 되기 위해선, 팀원들의 이해가 필요하다.
  • 25. 과유불급
  • 26. 패턴의 남용. 리소스 제약이 심한 시스템에 유연성 추가하기?? - Pipe & Filter - Component Configurator
  • 27. 패턴의 가족관계를 찾아라!
  • 28. Compound Pattern versus Composite Pattern
  • 29. 전형적인 가족관계 Common Strategy Variable Part <<CREATES>> Part Factory Log Security <<LINKS>> Configurable Part Component Transaction Configurator
  • 30. 여러분을 위해 하나씩 나누어 설명드리겠습니다.
  • 31. Strategy 인공위성과 슈퍼 컴퓨터의 정렬 로직은 같을까요? 같을까요? Super satellite Computer
  • 32. Strategy void main() ISort { //pSort라는 인터페이스를 선언한다 ISort iSort; +Sorting() if (GetSystemInfo() == Low) { //인공위성에서는 Bubble Sorting 사용 iSort = new CBubble(); } else { //슈퍼 컴퓨터에는 Quick Sorting 사용 Bubble Quick iSort = new CQuick(); } iSort.Sorting(); +Sorting() +Sorting() }
  • 33. Template Method Application ODBC(JDBC) API ODBC (JDBC) Driver Manager MSSQL Driver Oracle Driver
  • 34. Template Method Class QueryTemplate { public void doQuery() { QueryTemplate string dbCommand; dbCommand = FormatConnect(); dbCommand = FormantSelect(sql); +doQuery() } ... #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()
  • 35. Component Configurator 설정 파일 정보가 바뀌면 소프트웨어의 코드 수정없이 속성이 변경되어라!! 변경되어라!! Text XML Based Log Component DES RSA Configuration HTTP FTP Protocol File Protocol Great Architect
  • 36. Component Configurator Component Component Repository +Init() +Fini() +Suspend() +Resume() Component +Info() Configurator Core Core Component Component 38
  • 37. Component Configurator void main() { <xml version =“1.0”> <Components> <!– Protocol 정보 선택 --> IMessage iMessage = new Message(); <Protocol> if (GetComponentInfo(“Protocol”) = HTTP) HTTP iMessage->Protocol = HTTP; </Protocol> else iMessage->Protocol = FTP; <!– Log 정보 선택 --> <Log> if (GetComponentInfo(“Log”) = XML) XML iMessage->Protocol = XML; </Log> else Advanced Topic iMessage->Protocol = TEXT; <!– 보안 알고리즘 선택 --> Reflection <SecuAlgorithm> ... DES </SecuAltorithm> iMessage->Send(“Hello”);} </Components> 39 Devpia A&D EVA 4/13/2009
  • 38. Reflection Meta Level further modifies meta- meta-level components MetaObject A MetaObject B MOP modifies retrieves information uses uses uses uses Component A further Component B UserInterface base- base-level provides components access to Base Level
  • 39. Reflection ModuleBuilder AssemblyModule = CreatedAssembly.DefineDynamicModule(quot;MathModulequot;,quot;Math.dllquot;); TypeBuilder MathType = AssemblyModule.DefineType(quot;DoMathquot;, TypeAttributes.Public | TypeAttributes.Class); System.Type [] ParamTypes = new Type[] {typeof(int),typeof(int) }; MethodBuilder SumMethod = MathType.DefineMethod(quot;Sumquot;, MethodAttributes.Public, typeof(int), ParamTypes); ParameterBuilder Param1 = SumMethod.DefineParameter(1,ParameterAttributes.In, quot;num1quot;); ParameterBuilder Param2 = SumMethod.DefineParameter(1,ParameterAttributes.In, quot;num2quot;); ... MathType.CreateType(); return CreatedAssembly;
  • 40. Reflection using System; using System.Reflection; ... public class EmitDemoTest { static void Main() { ... System.Type MathType = EmitAssembly.GetType(quot;DoMathquot;); object[] Parameters = new object [2]; Parameters[0] = (object) (5); Parameters[1] = (object) (9); MathType,false); object EmitObj = Activator.CreateInstance (MathType,false); MathType.InvokeMember(quot;Sumquot;, object Result = MathType.InvokeMember(quot;Sumquot;, BindingFlags.InvokeMethod ,null,EmitObj,Parameters); null,EmitObj,Parameters); Console.WriteLine(quot;Sum of {0}+{1} is {2}quot;, Parameters[0],Parameters[1],Result.ToString()); Console.ReadLine(); } }
  • 41. 다시 보는 가족 관계 Strategy Common Variable Part <<CREATES>> Part Factory Log Security <<LINKS>> Configurable Part Component Transaction Configurator
  • 42. 패턴 가족 이야기 2
  • 43. 스타에서의 Observer Change 1. Observation Data Starcraft 때문에 생긴 오해!! 2. Notification 45 Devpia A&D EVA 4/13/2009
  • 44. 패턴에 있는 Observer는 Observer는 통보 받는 자(Notifieer)이다. Notifieer)이다.
  • 45. Hollywood Principle Don’t Call us!! Manager Applicants
  • 46. Hollywood Principle Don’t Call us! We Call You!!! Manager Applicants
  • 47. 정확한 Observer Change 1. Change 2. Change Data Manager Client (Source) 3. Notification Observer is Notifieer Client (Type1) Client (Type2) Client (Type3)
  • 48. Observer Subject Observer +Update () +Attach (Observer o) +Detach (Observer o) +Notify() Concrete Concrete Observer Subject
  • 49. 패턴 가족 이야기 2 Get Info Change Load Handler Config File Notifiy Client A Overhead!! Configuration File App.config File I/O Web.config Client B
  • 50. 패턴 가족 이야기 2 Get Info Change Load Handler Config File Notifiy Client A FileSystemWatcher .NotifyFilter Configuration File App.config Web.config A Smart Developer
  • 51. 패턴 가족 이야기 3
  • 52. 무거운 의존관계.
  • 53. 무거운 (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); … }
  • 54. 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); } }
  • 55. 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); … }
  • 56. 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/
  • 57. 많은 가족관계 (Compound Pattern) 사례를 알아야.. 실제 설계 시 적용하기 쉽다.
  • 58. 패턴과 SoC (Separation of Concerns)
  • 59. SoC is quot;focusing one's attention upon some aspect”
  • 60. 결국 패턴은 복잡한 문제를 잘 SoC 하는 경험들을 모아놓은 산물..
  • 61. JAWS - 웹 서버의 복잡한 문제를 잘 SoC한 사례 패턴을 이용한 웹 서버 만들기 (한국어 강좌) http://www.devpia.com/NET2/EvaCast/Lecture/?cu=view&r=11
  • 62. 하지만 현실에는.. 유연성에만 초점을 맞추어 SoC 할 수 없다. 분산 객체 사례.. CORBA, Web Service..
  • 63. 그래서 발생 하는 Ripple Effect (파문 효과).
  • 64. SoC in motion. Vision statement RTM Feature complete Release Testing Planning M1 M2 Technology Preview Beta 1 Beta 2 RC1 Milestone Quality
  • 65. 4. 패턴의 올바른 빌드 오더..
  • 66. 초보를 위한 패턴 빌드오더.. 68 Devpia A&D EVA 4/13/2009
  • 67. POSA 1 (아키텍쳐 패턴) œ Layer œ Model -View-Controller œ Pipe & Filter œ Presentation -Abstraction - Control œ Broker œ Reflection œ Master Slave œ Client – Dispatcher œ Counted Pointer œ Forwarder-Receiver œ Blackboard
  • 68. POSA 2 (분산 객체를 위한 패턴)
  • 69. POSA 3 (자원 관리를 위한 패턴) § Resource Lifecycle § Resource Acquisition œ Caching œ Lookup œ Pooling œ Lazy Acquisition œ Coordinator œ Eager Acquisition œ Resource Lifecycle Manager œ Partial Acquisition § Resource Release œ Leasing œ Evictor 71 Devpia A&D EVA 4/13/2009
  • 70. 그 외 패턴들.. 72 Devpia A&D EVA 4/13/2009
  • 71. 그 외 패턴들.. 73 Devpia A&D EVA 4/13/2009
  • 72. 그 외 패턴들.. 74 Devpia A&D EVA 4/13/2009
  • 73. 5. 패턴 + 생산성 증대. 내 친구.. 를 소개합니다.
  • 74. EA의 기능 소개.. § UML 2.1 Full 지원 § 모델링 정보를 다양한 DBMS와 연동하여 저장가능 § 형식을 파괴하는 모델링 지원 œ Use Case에서도 Class Diagram의 요소들을 사용가능 § 다양한 언어를 지원 œ C++, C#, Delphi, Java, VB, VB.NET, PHP, Python § 강력한 코드 탬플릿 생성 기능 § 강력한 역공학 기능 § 다양한 Plug-in 지원 § 테스팅 생성및 관리 (기존 Unit Testing 과 연동됨) § 가장 저렴한 가격 1 Copy당 20만원 ~ 30만원 사이 76
  • 75. Code Template을 이용한 공장 만들기 77
  • 76. 1. StreoType 생성 Setting – UML – Streotypes 78
  • 77. 2. 클래스 설계 후 StreoType 할당 79
  • 78. 3. 메소드 속성에 맞는 태깅생성 예를 들어 현재 재고를 파악하는 메소드는 Database에서 데이터를 가져오는 (Get) 타입인 경우. 80
  • 79. 4. 코드 생성 탬플릿 작성 Settings – Code Generation Templates 다양한 생성할 코드 언어 선택 입력 생성할 코드 템 플릿 Namespace, Class, Operation 등 스트레오 타입 별 템플릿을 지 정 81
  • 80. 스트레오 타입 코드 템플릿 추가 82
  • 81. 스트레오 템플릿 추가 § Import Section œ DLL 이나 Namespace를 추가하는 부분 § Operation Body œ 메소드 구현 부에 사용자 코드를 추가 함 83
  • 82. 간단한 예 - OperationBody %if opTag:quot;DataAccessTypequot; ==quot;getquot; % //데이터를 얻어오는 쿼리 IDataReader reader = null; %opReturnType% retVal = new %opReturnType%(); try { // 1. Create the Database object, using the default database service. Database db = DatabaseFactory.CreateDatabase(); log.Debug(quot;Create Database Factoryquot;); // 2. Create DB Command string sqlCommand = quot;$queryNamequot;; dbCommand = db.GetStoredProcCommand(sqlCommand); log.Debug(quot;GetStoredProcCommand(quot; + sqlCommand + quot;)quot;); …. } %elseIf opTag:quot;DataAccessTypequot; ==quot;setquot;% //데이터를 쓰는 쿼리 DbConnection connection = null; UInt32 retVal = 0; try { …….. 84 84
  • 83. Reverse Engineering 85
  • 84. 통합 개발 환경 구축하기 86
  • 85. 통합 개발 환경 구축하기 87
  • 86. 개발 환경 구축 – 프로세스로 디버깅 하기 88
  • 87. 프로세스로 디버깅하기 89
  • 88. 디버깅 내용을 Sequence Diagram으로 생성 90
  • 89. 디버깅 내용을 Sequence Diagram으로 생성 91
  • 90. Unit Testing
  • 91. Unit Testing과 연동됨 § 현재 xUnit (JUnit, Nunit) 형태로 생성및 관 리가 가능함. § 다른 Unit Test는 Package Script로 연동가 능.
  • 92. Visual Studio.NET 내장 UnitTest (mstest)셋팅 법
  • 93. 연동된 Unit Test
  • 94. 참고자료 § 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
  • 95. 참고자료 § “Soc in motion” http://www.betaversion.org/~stefano/linotype/news/143/ § FileSystemWatcher.NotifyFilter http://msdn2.microsoft.com/en- us/library/system.io.filesystemwatcher.notifyfilter(VS.80).aspx
  • 96. 참고자료 Douglas C. Schmidt (PLoP Editor, POSA 2, 4 Writter) JAWS: An Application Framework for High Performance Web System http://citeseer.ist.psu.edu/81775.html (En) http://www.devpia.com/net2/EvaCast/Lecture/?cu=view&r=11 (Kr) Ralph Johnson (GoF , Design Patterns) Evolving Frameworks http://st-www.cs.uiuc.edu/users/droberts/evolve.html (En) http://arload.wordpress.com/2008/09/15/evolvingframeworks/ (Kr)
  • 97. 참고자료 Robert C. Martin Principles of Package Architecture (Design Principles and Design Pattern s) http://www.objectmentor.com/resources/articles/Principles_and_Patterns. pdf (En) http://www.devpia.com/net2/EvaCast/Lecture/?cu=view&r=108 (Kr) For Korean People.. Load to Architect http://www.arload.net EvaCast (Online Free Lecture) http://www.evacast.net
  • 98. Question? 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다. This work is licensed under Creative Commons Korea Attribution 2.0 License.