SlideShare uma empresa Scribd logo
1 de 90
Baixar para ler offline
미워도 다시 보는   패턴 이야기.
손영수
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

Mais conteúdo relacionado

Mais procurados

스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바 테스트 자동화
자바 테스트 자동화자바 테스트 자동화
자바 테스트 자동화Sungchul Park
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11hungrok
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksSunuk Park
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙Hyosang Hong
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로Dongmin Shin
 
Java programming pdf
Java programming pdfJava programming pdf
Java programming pdfJi Hoon Lee
 
Java null survival guide
Java null survival guideJava null survival guide
Java null survival guideSungchul Park
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙Hong Hyo Sang
 
자바8 나머지 공개
자바8 나머지 공개자바8 나머지 공개
자바8 나머지 공개Sungchul Park
 
[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기Chris Ohk
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012Esun Kim
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Yeon Soo Kim
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerKyung Koo Yoon
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명Peter YoungSik Yun
 
Java9 특징 훑어보기
Java9 특징 훑어보기Java9 특징 훑어보기
Java9 특징 훑어보기duriepark 유현석
 
자바 메모리 릭 패턴
자바 메모리 릭 패턴자바 메모리 릭 패턴
자바 메모리 릭 패턴효원 강
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012Daum DNA
 

Mais procurados (20)

스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
 
자바 테스트 자동화
자바 테스트 자동화자바 테스트 자동화
자바 테스트 자동화
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworks
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로
 
Java programming pdf
Java programming pdfJava programming pdf
Java programming pdf
 
Java null survival guide
Java null survival guideJava null survival guide
Java null survival guide
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙
 
자바8 나머지 공개
자바8 나머지 공개자바8 나머지 공개
자바8 나머지 공개
 
[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기[NDC 2018] 유체역학 엔진 개발기
[NDC 2018] 유체역학 엔진 개발기
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
Java tutorial
Java tutorialJava tutorial
Java tutorial
 
Java 기초
Java 기초Java 기초
Java 기초
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
Java9 특징 훑어보기
Java9 특징 훑어보기Java9 특징 훑어보기
Java9 특징 훑어보기
 
자바 메모리 릭 패턴
자바 메모리 릭 패턴자바 메모리 릭 패턴
자바 메모리 릭 패턴
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012
 

Destaque

Framework Engineering Revisited
Framework Engineering RevisitedFramework Engineering Revisited
Framework Engineering RevisitedYoungSu Son
 
모바일 트랜드 2013 - 간단 버전
모바일 트랜드 2013 - 간단 버전모바일 트랜드 2013 - 간단 버전
모바일 트랜드 2013 - 간단 버전YoungSu Son
 
funf - Android Sensing Framework
funf - Android Sensing Frameworkfunf - Android Sensing Framework
funf - Android Sensing FrameworkYoungSu Son
 
04. fearless change
04. fearless change 04. fearless change
04. fearless change YoungSu Son
 
Fearless Change
Fearless Change Fearless Change
Fearless Change YoungSu Son
 
안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴  안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴 YoungSu Son
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법 YoungSu Son
 

Destaque (7)

Framework Engineering Revisited
Framework Engineering RevisitedFramework Engineering Revisited
Framework Engineering Revisited
 
모바일 트랜드 2013 - 간단 버전
모바일 트랜드 2013 - 간단 버전모바일 트랜드 2013 - 간단 버전
모바일 트랜드 2013 - 간단 버전
 
funf - Android Sensing Framework
funf - Android Sensing Frameworkfunf - Android Sensing Framework
funf - Android Sensing Framework
 
04. fearless change
04. fearless change 04. fearless change
04. fearless change
 
Fearless Change
Fearless Change Fearless Change
Fearless Change
 
안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴  안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법
 

Semelhante a miss_pattern_v2

불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계Chiwon Song
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQLI Goo Lee
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?NAVER D2
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...Taekyu Lim
 
Msrds game server
Msrds game serverMsrds game server
Msrds game serverperpet
 
스프링처럼 JDBC 리팩터링하기
스프링처럼 JDBC 리팩터링하기 스프링처럼 JDBC 리팩터링하기
스프링처럼 JDBC 리팩터링하기 Chanwook Park
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912Yooseok Choi
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVONYounghan Kim
 
03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법Hankyo
 
Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍흥배 최
 
[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍NAVER D2
 
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템noerror
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱NAVER D2
 
회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemyJc Kim
 
데이터베이스패턴
데이터베이스패턴데이터베이스패턴
데이터베이스패턴Suan Lee
 

Semelhante a miss_pattern_v2 (20)

불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
Spark sql
Spark sqlSpark sql
Spark sql
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
 
Msrds game server
Msrds game serverMsrds game server
Msrds game server
 
스프링처럼 JDBC 리팩터링하기
스프링처럼 JDBC 리팩터링하기 스프링처럼 JDBC 리팩터링하기
스프링처럼 JDBC 리팩터링하기
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
 
03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법
 
Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍
 
[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍
 
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy회사에서 써보는 SQLAlchemy
회사에서 써보는 SQLAlchemy
 
데이터베이스패턴
데이터베이스패턴데이터베이스패턴
데이터베이스패턴
 

Mais de YoungSu Son

Fault Tolerance 패턴
Fault Tolerance 패턴 Fault Tolerance 패턴
Fault Tolerance 패턴 YoungSu Son
 
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance TuningClean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance TuningYoungSu Son
 
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화YoungSu Son
 
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭) Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭) YoungSu Son
 
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)YoungSu Son
 
Singleton 패턴 (김진영 - EVA, 소마에 10기)
Singleton 패턴 (김진영 -  EVA, 소마에 10기) Singleton 패턴 (김진영 -  EVA, 소마에 10기)
Singleton 패턴 (김진영 - EVA, 소마에 10기) YoungSu Son
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기) 생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기) YoungSu Son
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 YoungSu Son
 
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) YoungSu Son
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) YoungSu Son
 
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법 DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법 YoungSu Son
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기YoungSu Son
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항 YoungSu Son
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법YoungSu Son
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 YoungSu Son
 
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionAndroid Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionYoungSu Son
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기) YoungSu Son
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 YoungSu Son
 

Mais de YoungSu Son (20)

Fault Tolerance 패턴
Fault Tolerance 패턴 Fault Tolerance 패턴
Fault Tolerance 패턴
 
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance TuningClean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance Tuning
 
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
 
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭) Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭)
 
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
 
Singleton 패턴 (김진영 - EVA, 소마에 10기)
Singleton 패턴 (김진영 -  EVA, 소마에 10기) Singleton 패턴 (김진영 -  EVA, 소마에 10기)
Singleton 패턴 (김진영 - EVA, 소마에 10기)
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기) 생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기)
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
 
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
 
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법 DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
 
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionAndroid Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + Genymotion
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
 

miss_pattern_v2

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