미워도 다시 보는   패턴 이야기.
손영수
arload@live.com

EvaCast 리더
http://www.evacast.net
데브피아 아키텍쳐 시삽

Blog - 아키텍트로 가는 길.
http://www.arload.net
오늘 나눌 이야기 거리들.
 패턴의 정의 (패턴이란?)


 패턴에 대핚 오해와 짂실
 패턴으로 가는 길


 패턴 구성요소 바로 알기
 패턴의 올바른 학습 가이드라인
1. 도대체..
패턴은 무엇일까?
Pattern
  is
Father
우리는 아버지와 비슷한
생김새, 성격, 습관 등을
가지고 있다.
이미 해결한 문제와
유사한 문제들은..

유사한 방법(패턴)으로
해결 할 수 있다.
그럼 패턴은 과연..


왜   내가   적용하려면
안될까?
2. 패턴에 대한 오해와 진실
GoF 23개의 Pattern으로
우아한 프로그램 만들기?
지구상의 패턴들..

        +
 논문 형태로 발표된
 패턴 몇 백개.
패턴은 섬이 아니다.
여러 개의
패턴이 뭉쳐서 움직인다.
               Strategy
                                            Common
Variable                   ...
여러 개의
패턴이 뭉쳐서 움직인다.
패턴은 소프트웨어 설계
쪽만 다룬다?
솔로들을 위한 패턴?




http://www.amazon.com/Dating-Design-Patterns-Solveig-Haugland/dp/0974312002/ref=pd_bbs_sr_1?ie=UTF8&s=book...
조직을 변화시키는 패턴.

  새로운 생각을
  조직에 전파하는
  48가지의
  패턴과 패턴 언어들.
Linda Rising과 Fearless Change 책 소개 –
http://arload.wordpress.com...
소프트웨어 관련된
모든 행위들을 다룬다.
 팀을 이루어 설계 대련을 수행하는 패턴
   



                                   +
       http://portal.acm.org/c...
패턴은 만병통치약?
 비약적인 성능 향상 ?
 생산성 증대 ?
 최적화 ?

 심지어 Silver Bullet ??
패턴의 장점은..




  유연성       확장성
3. 패턴으로 가는 길...
패턴에 대한 올바른 마음가짐
아키텍쳐의 이해 대상


                  Martin Fowler says …

The expert developers working on that project have
a shared understa...
역시 패턴도..

팀 내 의사 소통의 수단이
되기 위해선,
팀원들의 이해가 필요하다.
선무당이 사람 잡는다.

해당 그림 추가
패턴의 남용.

리소스 제약이 심한 시스템에
유연성 추가하기??

- Pipe & Filter
- Component Configurator
패턴의 가족관계를 찾아라!
Compound Pattern

     versus

Composite Pattern
전형적인 가족관계

               Strategy                           Common
Variable                                            Pa...
여러분을 위해

하나씩 나누어
설명드리겠습니다.
Strategy

             인공위성과
             슈퍼 컴퓨터의 정렬
             로직은 같을까요?




 satellite                Super
          ...
Strategy
                                       void main()
             ISort                     {
                     ...
Template Method

      Application


      ODBC(JDBC) API



      ODBC (JDBC) Driver Manager



     MSSQL Driver        ...
Template Method
                                                       Class QueryTemplate
                               ...
Component Configurator
                  설정 파일 정보가 바뀌면
                  소프트웨어의
                  코드 수정없이
                ...
Component Configurator
                                Component
    Component
    Repository                  +Init()
   ...
Component Configurator
                                      void main()
<xml version =“1.0”>                  {
<Componen...
Reflection
Meta Level
                             further
                             meta-level                      mo...
Reflection
ModuleBuilder AssemblyModule =
CreatedAssembly.DefineDynamicModule("MathModule","Math.dll");

TypeBuilder MathT...
Reflection
using System;
using System.Reflection;
...
    public class EmitDemoTest
     {   static void Main()
         {...
다시 보는 가족 관계

               Strategy
Variable                                          Common
Part
                       ...
패턴 가족 이야기 2
스타에서의 Observer
        Change



 Data        1. Observation
                       Starcraft 때문에
                       생...
패턴에 있는 Observer는
통보 받는 자(Notifieer)이다.
Hollywood Principle



                Don’t
                Call us!!


                            Manager




   Applic...
Hollywood Principle

          Don’t Call us!

          We Call You!!!




Manager




                           Applica...
정확한 Observer

          Change                                1. Change
                   2. Change


   Data
           ...
Observer
 Subject                Observer


 +Attach (Observer o)   +Update ()
 +Detach (Observer o)
 +Notify()




 Concr...
패턴 가족 이야기 2
           Get Info
                                                   Change
                      Handler   ...
패턴 가족 이야기 2
           Get Info
                                                 Change
                      Handler     ...
패턴 가족 이야기 3
무거운 의존관계.
무거운 (Heavy Dependency) 상황
 // your API
 public class Tracer {
   MessageQueue mq = new MessageQueue(…);
   public void Tra...
Inversion of Control
 // your better API
 public abstract class TraceListener {
   public abstract void Trace(string messa...
Dependency Injection

 // your customer’s program that is easier to test
 Tracer tracer = new Tracer(new FileListener());
...
Dependency Injection Container
 // customer’s program that is even easier to test
 Tracer tracer = container.Resolve<Trace...
많은
가족관계 (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=vie...
하지만 현실에는..
유연성에만 초점을
맞추어 SoC 할 수 없다.

분산 객체 사례..
CORBA, Web Service..
4. 패턴 구성요소 바로 알기
패턴의 구성요소(Components)

 Name / Aliases    Solution
 Context           Consequences
 Forces            Known Use
 Pro...
패턴에서 가장 중요시 봐
 야 할 구성요소는..
어머니의
재미난 조언..
길고
        짧은 건
못 올라갈   대봐야
  나무는   안다.
쳐다 보지
  말아라
해결책 (조언)은 알았는데..
언제 이 조언을 사용하지?
어머니의 조언에서
  빠진 것은?

 Context
결과보다
  어떤 상황에서
이 패턴을 적용하는지
  아는 것이 중요.
또 중요한 것 하나!

 Resulting
 Context
패턴 적용 시, 발생하는
단점과 Side Effect를
  주의 깊게 살펴보기
문제가 뭐야!!

Problem
현재 내가 처한
문제가 무엇인지..

 제대로 알아야
패턴을 써 먹지.
실 사례를 살펴봐라

Known Use.
Known Use를 통해
실패와 성공의 이야기를 들어라
패턴의       확장된           구성요소(Components)

   Name / Aliases          Side Effect
   Context                 Rationale
...
구성요소들에 대한
재미난 이야기들은..
각각의 구성요소에 대한 자세한 설명 –
확장된 PLoP 패턴 구성 요소들
http://arload.wordpress.com/2009/09/03/plop-pattern-templat...
5. 패턴의
올바른 학습 가이드라인.
초보를 위한 패턴 빌드오더..




          Devpia A&D EVA   10/20/2009   82
POSA 1 (아키텍쳐 패턴)



  Layer                  Model -View-Controller
  Pipe & Filter          Presentation -Abstraction...
POSA 2 (분산 객체를 위한 패턴)
POSA 3 (자원 관리를 위한 패턴)
 Resource Acquisition     Resource Lifecycle
   Lookup                   Caching
   Lazy Acquis...
그 외 패턴들..




            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, Wil...
References
   FileSystemWatcher.NotifyFilter
    http://msdn2.microsoft.com/en-
    us/library/system.io.filesystemwatche...
miss_pattern_v2
Upcoming SlideShare
Loading in...5
×

miss_pattern_v2

2,037

Published on

miss pattern v2

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,037
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
43
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "miss_pattern_v2"

  1. 1. 미워도 다시 보는 패턴 이야기.
  2. 2. 손영수 arload@live.com EvaCast 리더 http://www.evacast.net 데브피아 아키텍쳐 시삽 Blog - 아키텍트로 가는 길. http://www.arload.net
  3. 3. 오늘 나눌 이야기 거리들.  패턴의 정의 (패턴이란?)  패턴에 대핚 오해와 짂실  패턴으로 가는 길  패턴 구성요소 바로 알기  패턴의 올바른 학습 가이드라인
  4. 4. 1. 도대체.. 패턴은 무엇일까?
  5. 5. Pattern is Father
  6. 6. 우리는 아버지와 비슷한 생김새, 성격, 습관 등을 가지고 있다.
  7. 7. 이미 해결한 문제와 유사한 문제들은.. 유사한 방법(패턴)으로 해결 할 수 있다.
  8. 8. 그럼 패턴은 과연.. 왜 내가 적용하려면 안될까?
  9. 9. 2. 패턴에 대한 오해와 진실
  10. 10. GoF 23개의 Pattern으로 우아한 프로그램 만들기?
  11. 11. 지구상의 패턴들.. + 논문 형태로 발표된 패턴 몇 백개.
  12. 12. 패턴은 섬이 아니다.
  13. 13. 여러 개의 패턴이 뭉쳐서 움직인다. Strategy Common Variable Part <<CREATES>> Part Factory (Modularity) Log <<LINKS>> Security Configurable Part Component Transaction Configurator
  14. 14. 여러 개의 패턴이 뭉쳐서 움직인다.
  15. 15. 패턴은 소프트웨어 설계 쪽만 다룬다?
  16. 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. 17. 조직을 변화시키는 패턴. 새로운 생각을 조직에 전파하는 48가지의 패턴과 패턴 언어들. Linda Rising과 Fearless Change 책 소개 – http://arload.wordpress.com/2009/09/18/plop-linda-rising-fearless-change/
  18. 18. 소프트웨어 관련된 모든 행위들을 다룬다.  팀을 이루어 설계 대련을 수행하는 패턴  + 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/
  19. 19. 패턴은 만병통치약?
  20. 20.  비약적인 성능 향상 ?  생산성 증대 ?  최적화 ?  심지어 Silver Bullet ??
  21. 21. 패턴의 장점은.. 유연성 확장성
  22. 22. 3. 패턴으로 가는 길...
  23. 23. 패턴에 대한 올바른 마음가짐
  24. 24. 아키텍쳐의 이해 대상 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
  25. 25. 역시 패턴도.. 팀 내 의사 소통의 수단이 되기 위해선, 팀원들의 이해가 필요하다.
  26. 26. 선무당이 사람 잡는다. 해당 그림 추가
  27. 27. 패턴의 남용. 리소스 제약이 심한 시스템에 유연성 추가하기?? - Pipe & Filter - Component Configurator
  28. 28. 패턴의 가족관계를 찾아라!
  29. 29. Compound Pattern versus Composite Pattern
  30. 30. 전형적인 가족관계 Strategy Common Variable Part <<CREATES>> Part Factory Log <<LINKS>> Security Configurable Part Component Transaction Configurator
  31. 31. 여러분을 위해 하나씩 나누어 설명드리겠습니다.
  32. 32. Strategy 인공위성과 슈퍼 컴퓨터의 정렬 로직은 같을까요? satellite Super Computer
  33. 33. 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() }
  34. 34. Template Method Application ODBC(JDBC) API ODBC (JDBC) Driver Manager MSSQL Driver Oracle Driver
  35. 35. 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()
  36. 36. Component Configurator 설정 파일 정보가 바뀌면 소프트웨어의 코드 수정없이 속성이 변경되어라!! Text Based XML Log Component DES RSA Configuration HTTP FTP Protocol File Protocol Great Architect
  37. 37. Component Configurator Component Component Repository +Init() +Fini() +Suspend() +Resume() Component +Info() Configurator Core Core Component Component 38
  38. 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
  39. 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
  40. 40. 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;
  41. 41. 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(); } }
  42. 42. 다시 보는 가족 관계 Strategy Variable Common Part <<CREATES>> Part Factory Log <<LINKS>> Security Configurable Part Component Transaction Configurator
  43. 43. 패턴 가족 이야기 2
  44. 44. 스타에서의 Observer Change Data 1. Observation Starcraft 때문에 생긴 오해!! 2. Notification Devpia A&D EVA 10/20/2009 45
  45. 45. 패턴에 있는 Observer는 통보 받는 자(Notifieer)이다.
  46. 46. Hollywood Principle Don’t Call us!! Manager Applicants
  47. 47. Hollywood Principle Don’t Call us! We Call You!!! Manager Applicants
  48. 48. 정확한 Observer Change 1. Change 2. Change Data Manager Client (Source) 3. Notification Observer is Notifieer Client (Type1) Client (Type2) Client (Type3)
  49. 49. Observer Subject Observer +Attach (Observer o) +Update () +Detach (Observer o) +Notify() Concrete Concrete Subject Observer
  50. 50. 패턴 가족 이야기 2 Get Info Change Handler Load Config File Notifiy Client A Overhead!! Configuration File App.config File I/O Web.config Client B
  51. 51. 패턴 가족 이야기 2 Get Info Change Handler Load Config File Notifiy Client A FileSystemWatcher .NotifyFilter Configuration File App.config Web.config A Smart Developer
  52. 52. 패턴 가족 이야기 3
  53. 53. 무거운 의존관계.
  54. 54. 무거운 (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); … }
  55. 55. 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); } }
  56. 56. 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); … }
  57. 57. 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/
  58. 58. 많은 가족관계 (Compound Pattern) 사례를 알아야.. 실제 설계 시 적용하기 쉽다.
  59. 59. 패턴과 SoC (Separation of Concerns)
  60. 60. SoC is "focusing one's attention upon some aspect”
  61. 61. 결국 패턴은 복잡한 문제를 잘 SoC 하는 경험들을 모아놓은 산물..
  62. 62. JAWS - 웹 서버의 복잡한 문제를 잘 SoC한 사례 패턴을 이용한 웹 서버 만들기 (한국어 강좌) http://www.devpia.com/NET2/EvaCast/Lecture/?cu=view&r=11
  63. 63. 하지만 현실에는.. 유연성에만 초점을 맞추어 SoC 할 수 없다. 분산 객체 사례.. CORBA, Web Service..
  64. 64. 4. 패턴 구성요소 바로 알기
  65. 65. 패턴의 구성요소(Components)  Name / Aliases  Solution  Context  Consequences  Forces  Known Use  Problem  Related Pattern
  66. 66. 패턴에서 가장 중요시 봐 야 할 구성요소는..
  67. 67. 어머니의 재미난 조언..
  68. 68. 길고 짧은 건 못 올라갈 대봐야 나무는 안다. 쳐다 보지 말아라
  69. 69. 해결책 (조언)은 알았는데.. 언제 이 조언을 사용하지?
  70. 70. 어머니의 조언에서 빠진 것은? Context
  71. 71. 결과보다 어떤 상황에서 이 패턴을 적용하는지 아는 것이 중요.
  72. 72. 또 중요한 것 하나! Resulting Context
  73. 73. 패턴 적용 시, 발생하는 단점과 Side Effect를 주의 깊게 살펴보기
  74. 74. 문제가 뭐야!! Problem
  75. 75. 현재 내가 처한 문제가 무엇인지.. 제대로 알아야 패턴을 써 먹지.
  76. 76. 실 사례를 살펴봐라 Known Use.
  77. 77. Known Use를 통해 실패와 성공의 이야기를 들어라
  78. 78. 패턴의 확장된 구성요소(Components)  Name / Aliases  Side Effect  Context  Rationale  Forces  Known Use  Problem  Related Pattern  Solution  Sketch  Resulting Context  References
  79. 79. 구성요소들에 대한 재미난 이야기들은.. 각각의 구성요소에 대한 자세한 설명 – 확장된 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/
  80. 80. 5. 패턴의 올바른 학습 가이드라인.
  81. 81. 초보를 위한 패턴 빌드오더.. Devpia A&D EVA 10/20/2009 82
  82. 82. POSA 1 (아키텍쳐 패턴)  Layer  Model -View-Controller  Pipe & Filter  Presentation -Abstraction - Control  Broker  Reflection  Master Slave  Client – Dispatcher  Counted Pointer  Forwarder-Receiver  Blackboard
  83. 83. POSA 2 (분산 객체를 위한 패턴)
  84. 84. 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
  85. 85. 그 외 패턴들.. Devpia A&D EVA 10/20/2009 86
  86. 86. 그 외 패턴들.. Devpia A&D EVA 10/20/2009 87
  87. 87. 그 외 패턴들.. Devpia A&D EVA 10/20/2009 88
  88. 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
  89. 89. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×