SlideShare ist ein Scribd-Unternehmen logo
1 von 100
Downloaden Sie, um offline zu lesen
미워도 다시 보는      이야기.
            패턴 이야기.
손영수
arload@live.com

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

Blog - 아키텍트로 가는 길.
http://www.arload.net
오늘 나눌 이야기 거리들.

§ 패턴의 정의 (패턴이란?)
§ 패턴에 대한 오해와 진실


§ 패턴으로 가는 길


§ 패턴 빌드 오더
§ 패턴 + 생산성 두 마리 토끼 잡기
1. 도대체..
패턴은 무엇일까?
Pattern
  is
Father
우리는 아버지와 비슷한
생김새, 성격, 습관 등을
가지고 있다.
이미 해결한 문제와
유사한 문제들은..

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


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

        +
 논문 형태로 발표된
 패턴 몇 백개.
패턴은 섬이 아니다.
여러 개의
패턴이 뭉쳐서 움직인다.
                                            Common
               Strategy
                                            Part
Variable
                              <<CREATES>>
Part
                                            (Modularity)
               Factory


                                            Log


                                            Security
                              <<LINKS>>
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
소프트웨어 관련된
모든 행위들을 다룬다.
§ 팀을 이루어 설계 대련을 수행하는 패턴



                                  +
   œ 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
                                     architecture’
                                     architecture


http://www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
역시 패턴도..

팀 내 의사 소통의 수단이
되기 위해선,
팀원들의 이해가 필요하다.
과유불급
패턴의 남용.

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

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

     versus

Composite Pattern
전형적인 가족관계

                                                  Common
               Strategy
Variable                                            Part
                              <<CREATES>>
Part
               Factory


                                            Log


                                            Security
                              <<LINKS>>
Configurable
Part           Component                    Transaction
               Configurator
여러분을 위해

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

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




                          Super
 satellite
                          Computer
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()
                                       }
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();
                                                           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()
Component Configurator
                  설정 파일 정보가 바뀌면
                  소프트웨어의
                  코드 수정없이
                  속성이 변경되어라!!
                      변경되어라!!          Text
                                       XML Based
                                       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>
                                             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
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
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;
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();
        }
    }
다시 보는 가족 관계

               Strategy
                                                  Common
Variable
                                                    Part
                              <<CREATES>>
Part
               Factory


                                            Log


                                            Security
                              <<LINKS>>
Configurable
Part           Component                    Transaction
               Configurator
패턴 가족 이야기 2
스타에서의 Observer
        Change



             1. Observation
 Data
                       Starcraft 때문에
                       생긴 오해!!

                            2. Notification




                                                                45
                                   Devpia A&D EVA   4/13/2009
패턴에 있는 Observer는
       Observer는
통보 받는 자(Notifieer)이다.
        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


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




                        Concrete
 Concrete
                        Observer
 Subject
패턴 가족 이야기 2
           Get Info
                                                   Change
                                      Load
                      Handler                      Config File

                                      Notifiy
Client A


                           Overhead!!
                                                Configuration File
                                                App.config
                           File I/O
                                                Web.config




Client B
패턴 가족 이야기 2
           Get Info
                                                 Change
                                    Load
                      Handler                    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
quot;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..
그래서 발생 하는
Ripple Effect (파문 효과).
SoC in motion.

           Vision statement                                            RTM
                                             Feature complete
                                                       Release
                                                       Testing
Planning            M1               M2




                 Technology Preview Beta 1          Beta 2       RC1



                         Milestone Quality
4. 패턴의
올바른 빌드 오더..
초보를 위한 패턴 빌드오더..




                                       68
          Devpia A&D EVA   4/13/2009
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 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
그 외 패턴들..




                                         72
            Devpia A&D EVA   4/13/2009
그 외 패턴들..




                                         73
            Devpia A&D EVA   4/13/2009
그 외 패턴들..




                                         74
            Devpia A&D EVA   4/13/2009
5. 패턴 + 생산성 증대.
     내 친구..


     를 소개합니다.
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
Code Template을
이용한 공장 만들기
                 77
1. StreoType 생성
 Setting – UML – Streotypes




                              78
2. 클래스 설계 후 StreoType 할당




                           79
3. 메소드 속성에 맞는 태깅생성
예를 들어 현재 재고를 파악하는 메소드는
Database에서 데이터를 가져오는 (Get) 타입인
  경우.




                                 80
4. 코드 생성 탬플릿 작성
       Settings – Code Generation Templates
    다양한                                       생성할 코드
   언어 선택                                        입력



생성할 코드 템
      플릿
  Namespace,
Class, Operation
       등




스트레오 타입
별 템플릿을 지
    정
                                                       81
스트레오 타입 코드 템플릿 추가




                    82
스트레오 템플릿 추가

§ Import Section
  œ DLL 이나   Namespace를 추가하는 부분


§ Operation Body
  œ 메소드 구현 부에 사용자 코드를 추가 함




                                  83
간단한 예 - 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
Reverse
 Engineering




               85
통합 개발 환경 구축하기




                86
통합 개발 환경 구축하기




                87
개발 환경 구축
– 프로세스로 디버깅 하기




                 88
프로세스로 디버깅하기




              89
디버깅 내용을
Sequence Diagram으로 생성




                        90
디버깅 내용을
Sequence Diagram으로 생성




                        91
Unit Testing
Unit Testing과 연동됨
§ 현재 xUnit (JUnit, Nunit) 형태로 생성및 관
  리가 가능함.
§ 다른 Unit Test는 Package Script로 연동가
  능.
Visual Studio.NET
내장 UnitTest (mstest)셋팅 법
연동된 Unit Test
참고자료
§ 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
참고자료
§ “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
참고자료
  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)
참고자료
         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
Question?
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0
                 대한민국 라이센스에 따라 이용하실 수 있습니다.
This work is licensed under Creative Commons Korea Attribution 2.0 License.

Weitere ähnliche Inhalte

Was ist angesagt?

Vidéo approche en immobilier
Vidéo approche en immobilierVidéo approche en immobilier
Vidéo approche en immobilierhervepouliot
 
MoSQL: More than SQL, but less than ORM
MoSQL: More than SQL, but less than ORMMoSQL: More than SQL, but less than ORM
MoSQL: More than SQL, but less than ORMMosky Liu
 
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013Mosky Liu
 
ORM2Pwn: Exploiting injections in Hibernate ORM
ORM2Pwn: Exploiting injections in Hibernate ORMORM2Pwn: Exploiting injections in Hibernate ORM
ORM2Pwn: Exploiting injections in Hibernate ORMMikhail Egorov
 
Itsecteam shell
Itsecteam shellItsecteam shell
Itsecteam shellady36
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Remy Sharp
 
ドキュメントデータベースとして MySQLを使う!? ~MySQL JSON UDF~
ドキュメントデータベースとして MySQLを使う!? ~MySQL JSON UDF~ドキュメントデータベースとして MySQLを使う!? ~MySQL JSON UDF~
ドキュメントデータベースとして MySQLを使う!? ~MySQL JSON UDF~yoyamasaki
 
Ruby on Rails Tutorial Part I
Ruby on Rails Tutorial Part IRuby on Rails Tutorial Part I
Ruby on Rails Tutorial Part IWei Jen Lu
 
Лабораторная работа №1
Лабораторная работа №1Лабораторная работа №1
Лабораторная работа №1Alexey Potopakhin
 
Sqladria 2009 SRC
Sqladria 2009 SRCSqladria 2009 SRC
Sqladria 2009 SRCtepsum
 
Solr integration in Magento Enterprise
Solr integration in Magento EnterpriseSolr integration in Magento Enterprise
Solr integration in Magento EnterpriseTobias Zander
 

Was ist angesagt? (20)

Vidéo approche en immobilier
Vidéo approche en immobilierVidéo approche en immobilier
Vidéo approche en immobilier
 
MoSQL: More than SQL, but less than ORM
MoSQL: More than SQL, but less than ORMMoSQL: More than SQL, but less than ORM
MoSQL: More than SQL, but less than ORM
 
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013
MoSQL: More than SQL, but Less than ORM @ PyCon APAC 2013
 
Php
PhpPhp
Php
 
ORM2Pwn: Exploiting injections in Hibernate ORM
ORM2Pwn: Exploiting injections in Hibernate ORMORM2Pwn: Exploiting injections in Hibernate ORM
ORM2Pwn: Exploiting injections in Hibernate ORM
 
Itsecteam shell
Itsecteam shellItsecteam shell
Itsecteam shell
 
HTML5 - Pedro Rosa
HTML5 - Pedro RosaHTML5 - Pedro Rosa
HTML5 - Pedro Rosa
 
Speeding up Red Team engagements with carnivorall
Speeding up Red Team engagements with carnivorallSpeeding up Red Team engagements with carnivorall
Speeding up Red Team engagements with carnivorall
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
 
Phonegap for Android
Phonegap for AndroidPhonegap for Android
Phonegap for Android
 
ドキュメントデータベースとして MySQLを使う!? ~MySQL JSON UDF~
ドキュメントデータベースとして MySQLを使う!? ~MySQL JSON UDF~ドキュメントデータベースとして MySQLを使う!? ~MySQL JSON UDF~
ドキュメントデータベースとして MySQLを使う!? ~MySQL JSON UDF~
 
Ruby on Rails Tutorial Part I
Ruby on Rails Tutorial Part IRuby on Rails Tutorial Part I
Ruby on Rails Tutorial Part I
 
jQuery Basic API
jQuery Basic APIjQuery Basic API
jQuery Basic API
 
Ushahidi
UshahidiUshahidi
Ushahidi
 
Grails紹介
Grails紹介Grails紹介
Grails紹介
 
Лабораторная работа №1
Лабораторная работа №1Лабораторная работа №1
Лабораторная работа №1
 
Sqladria 2009 SRC
Sqladria 2009 SRCSqladria 2009 SRC
Sqladria 2009 SRC
 
ORM Injection
ORM InjectionORM Injection
ORM Injection
 
Sk.php
Sk.phpSk.php
Sk.php
 
Solr integration in Magento Enterprise
Solr integration in Magento EnterpriseSolr integration in Magento Enterprise
Solr integration in Magento Enterprise
 

Andere mochten auch

Studyforprogrammer
StudyforprogrammerStudyforprogrammer
Studyforprogrammerguest0a0b14
 
Abstract factory pattern
Abstract factory patternAbstract factory pattern
Abstract factory patternminjin00
 
HolubOnPatterns/chapter3_2
HolubOnPatterns/chapter3_2HolubOnPatterns/chapter3_2
HolubOnPatterns/chapter3_2Vong Sik Kong
 
데브루키 스터디 발표
데브루키 스터디 발표데브루키 스터디 발표
데브루키 스터디 발표dagri82
 
Adapter pattern 한진수
Adapter pattern 한진수Adapter pattern 한진수
Adapter pattern 한진수진수 한
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)hyun soomyung
 
Command pattern 김우진
Command pattern 김우진Command pattern 김우진
Command pattern 김우진Woo Jin Kim
 
Client dispatcher server_pattern
Client dispatcher server_patternClient dispatcher server_pattern
Client dispatcher server_patternHeo Seungwook
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴Jaeho Seok
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장hyun soomyung
 
Learn design pattern-1
Learn design pattern-1Learn design pattern-1
Learn design pattern-1Daniel Lim
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2Daniel Lim
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4Daniel Lim
 
Oop design principle
Oop design principleOop design principle
Oop design principleRyan Park
 
소프트웨어 아키텍처 문서화
소프트웨어 아키텍처 문서화소프트웨어 아키텍처 문서화
소프트웨어 아키텍처 문서화영기 김
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법hyun soomyung
 

Andere mochten auch (20)

Pattern Writing
Pattern WritingPattern Writing
Pattern Writing
 
Studyforprogrammer
StudyforprogrammerStudyforprogrammer
Studyforprogrammer
 
Abstract factory pattern
Abstract factory patternAbstract factory pattern
Abstract factory pattern
 
HolubOnPatterns/chapter3_2
HolubOnPatterns/chapter3_2HolubOnPatterns/chapter3_2
HolubOnPatterns/chapter3_2
 
Solid
SolidSolid
Solid
 
데브루키 스터디 발표
데브루키 스터디 발표데브루키 스터디 발표
데브루키 스터디 발표
 
Adapter pattern 한진수
Adapter pattern 한진수Adapter pattern 한진수
Adapter pattern 한진수
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
 
Command pattern 김우진
Command pattern 김우진Command pattern 김우진
Command pattern 김우진
 
Client dispatcher server_pattern
Client dispatcher server_patternClient dispatcher server_pattern
Client dispatcher server_pattern
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장
 
Learn design pattern-1
Learn design pattern-1Learn design pattern-1
Learn design pattern-1
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4
 
Oop design principle
Oop design principleOop design principle
Oop design principle
 
GoF의 디자인 패턴
GoF의 디자인 패턴GoF의 디자인 패턴
GoF의 디자인 패턴
 
Mvc pattern
Mvc patternMvc pattern
Mvc pattern
 
소프트웨어 아키텍처 문서화
소프트웨어 아키텍처 문서화소프트웨어 아키텍처 문서화
소프트웨어 아키텍처 문서화
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
 

Ähnlich wie misspattern

yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909Yusuke Wada
 
OSGI workshop - Become A Certified Bundle Manager
OSGI workshop - Become A Certified Bundle ManagerOSGI workshop - Become A Certified Bundle Manager
OSGI workshop - Become A Certified Bundle ManagerSkills Matter
 
jQuery Internals + Cool Stuff
jQuery Internals + Cool StuffjQuery Internals + Cool Stuff
jQuery Internals + Cool Stuffjeresig
 
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_ЯндексеТанки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_ЯндексеYandex
 
Bkbiet day2 & 3
Bkbiet day2 & 3Bkbiet day2 & 3
Bkbiet day2 & 3mihirio
 
MySQL Clusterで高性能システムを構築する際のポイント
MySQL Clusterで高性能システムを構築する際のポイントMySQL Clusterで高性能システムを構築する際のポイント
MySQL Clusterで高性能システムを構築する際のポイントK H
 
Working With Rails
Working With RailsWorking With Rails
Working With RailsDali Wang
 
닷넷 개발자를 위한 패턴이야기
닷넷 개발자를 위한 패턴이야기닷넷 개발자를 위한 패턴이야기
닷넷 개발자를 위한 패턴이야기YoungSu Son
 
Pluggable Databases: What they will break and why you should use them anyway!
Pluggable Databases: What they will break and why you should use them anyway!Pluggable Databases: What they will break and why you should use them anyway!
Pluggable Databases: What they will break and why you should use them anyway!Guatemala User Group
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCpootsbook
 
DOSUG Intro to JQuery JavaScript Framework
DOSUG Intro to JQuery JavaScript FrameworkDOSUG Intro to JQuery JavaScript Framework
DOSUG Intro to JQuery JavaScript FrameworkMatthew McCullough
 
421 Ch
421 Ch421 Ch
421 Chanjaan
 
Automated Frontend Testing
Automated Frontend TestingAutomated Frontend Testing
Automated Frontend TestingNeil Crosby
 
Uma introdução ao framework Spring
Uma introdução ao framework SpringUma introdução ao framework Spring
Uma introdução ao framework Springelliando dias
 
[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022
[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022
[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022Johnny Sung
 
Rails Deployment with NginX
Rails Deployment with NginXRails Deployment with NginX
Rails Deployment with NginXStoyan Zhekov
 
E Pi Server Easy Search Technical Overview
E Pi Server Easy Search Technical OverviewE Pi Server Easy Search Technical Overview
E Pi Server Easy Search Technical Overviewguestd9aa5
 

Ähnlich wie misspattern (20)

What Can Compilers Do for Us?
What Can Compilers Do for Us?What Can Compilers Do for Us?
What Can Compilers Do for Us?
 
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
 
OSGI workshop - Become A Certified Bundle Manager
OSGI workshop - Become A Certified Bundle ManagerOSGI workshop - Become A Certified Bundle Manager
OSGI workshop - Become A Certified Bundle Manager
 
jQuery Internals + Cool Stuff
jQuery Internals + Cool StuffjQuery Internals + Cool Stuff
jQuery Internals + Cool Stuff
 
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_ЯндексеТанки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
 
Bkbiet day2 & 3
Bkbiet day2 & 3Bkbiet day2 & 3
Bkbiet day2 & 3
 
MySQL Clusterで高性能システムを構築する際のポイント
MySQL Clusterで高性能システムを構築する際のポイントMySQL Clusterで高性能システムを構築する際のポイント
MySQL Clusterで高性能システムを構築する際のポイント
 
Working With Rails
Working With RailsWorking With Rails
Working With Rails
 
닷넷 개발자를 위한 패턴이야기
닷넷 개발자를 위한 패턴이야기닷넷 개발자를 위한 패턴이야기
닷넷 개발자를 위한 패턴이야기
 
Pluggable Databases: What they will break and why you should use them anyway!
Pluggable Databases: What they will break and why you should use them anyway!Pluggable Databases: What they will break and why you should use them anyway!
Pluggable Databases: What they will break and why you should use them anyway!
 
Backbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVCBackbone.js — Introduction to client-side JavaScript MVC
Backbone.js — Introduction to client-side JavaScript MVC
 
DOSUG Intro to JQuery JavaScript Framework
DOSUG Intro to JQuery JavaScript FrameworkDOSUG Intro to JQuery JavaScript Framework
DOSUG Intro to JQuery JavaScript Framework
 
Jslunch6
Jslunch6Jslunch6
Jslunch6
 
421 Ch
421 Ch421 Ch
421 Ch
 
Automated Frontend Testing
Automated Frontend TestingAutomated Frontend Testing
Automated Frontend Testing
 
Uma introdução ao framework Spring
Uma introdução ao framework SpringUma introdução ao framework Spring
Uma introdução ao framework Spring
 
[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022
[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022
[Flutter] 來體驗 bloc 小方塊的神奇魔法 @Devfest 2022
 
Rails Deployment with NginX
Rails Deployment with NginXRails Deployment with NginX
Rails Deployment with NginX
 
Figaro
FigaroFigaro
Figaro
 
E Pi Server Easy Search Technical Overview
E Pi Server Easy Search Technical OverviewE Pi Server Easy Search Technical Overview
E Pi Server Easy Search Technical Overview
 

Mehr von 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
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법 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
 

Mehr von 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의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법
 
[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 다루기)
 

Kürzlich hochgeladen

Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 

Kürzlich hochgeladen (20)

Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 

misspattern

  • 1. 미워도 다시 보는 이야기. 패턴 이야기.
  • 2. 손영수 arload@live.com EvaCast 리더 http://www.evacast.net 데브피아 아키텍쳐 시삽 Blog - 아키텍트로 가는 길. http://www.arload.net
  • 3.
  • 4. 오늘 나눌 이야기 거리들. § 패턴의 정의 (패턴이란?) § 패턴에 대한 오해와 진실 § 패턴으로 가는 길 § 패턴 빌드 오더 § 패턴 + 생산성 두 마리 토끼 잡기
  • 7. 우리는 아버지와 비슷한 생김새, 성격, 습관 등을 가지고 있다.
  • 8.
  • 9. 이미 해결한 문제와 유사한 문제들은.. 유사한 방법(패턴)으로 해결 할 수 있다.
  • 10. 그럼 패턴은 과연.. 내가 왜 적용하려면 안될까?
  • 11. 2. 패턴에 대한 오해와 진실
  • 12. GoF 23개의 Pattern으로 우아한 프로그램 만들기?
  • 13. 지구상의 패턴들.. + 논문 형태로 발표된 패턴 몇 백개.
  • 15. 여러 개의 패턴이 뭉쳐서 움직인다. Common Strategy Part Variable <<CREATES>> Part (Modularity) Factory Log Security <<LINKS>> Configurable Part Component Transaction Configurator
  • 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 architecture’ architecture http://www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
  • 26. 역시 패턴도.. 팀 내 의사 소통의 수단이 되기 위해선, 팀원들의 이해가 필요하다.
  • 28. 패턴의 남용. 리소스 제약이 심한 시스템에 유연성 추가하기?? - Pipe & Filter - Component Configurator
  • 30. Compound Pattern versus Composite Pattern
  • 31. 전형적인 가족관계 Common Strategy Variable Part <<CREATES>> Part Factory Log Security <<LINKS>> Configurable Part Component Transaction Configurator
  • 33. Strategy 인공위성과 슈퍼 컴퓨터의 정렬 로직은 같을까요? 같을까요? Super satellite Computer
  • 34. 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() }
  • 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(); 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()
  • 37. Component Configurator 설정 파일 정보가 바뀌면 소프트웨어의 코드 수정없이 속성이 변경되어라!! 변경되어라!! Text XML Based 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> 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
  • 40. 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
  • 41. 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;
  • 42. 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(); } }
  • 43. 다시 보는 가족 관계 Strategy Common Variable Part <<CREATES>> Part Factory Log Security <<LINKS>> Configurable Part Component Transaction Configurator
  • 45. 스타에서의 Observer Change 1. Observation Data Starcraft 때문에 생긴 오해!! 2. Notification 45 Devpia A&D EVA 4/13/2009
  • 46. 패턴에 있는 Observer는 Observer는 통보 받는 자(Notifieer)이다. 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 +Update () +Attach (Observer o) +Detach (Observer o) +Notify() Concrete Concrete Observer Subject
  • 51. 패턴 가족 이야기 2 Get Info Change Load Handler Config File Notifiy Client A Overhead!! Configuration File App.config File I/O Web.config Client B
  • 52. 패턴 가족 이야기 2 Get Info Change Load Handler 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 quot;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. 그래서 발생 하는 Ripple Effect (파문 효과).
  • 66. SoC in motion. Vision statement RTM Feature complete Release Testing Planning M1 M2 Technology Preview Beta 1 Beta 2 RC1 Milestone Quality
  • 68. 초보를 위한 패턴 빌드오더.. 68 Devpia A&D EVA 4/13/2009
  • 69. POSA 1 (아키텍쳐 패턴) œ Layer œ Model -View-Controller œ Pipe & Filter œ Presentation -Abstraction - Control œ Broker œ Reflection œ Master Slave œ Client – Dispatcher œ Counted Pointer œ Forwarder-Receiver œ Blackboard
  • 70. POSA 2 (분산 객체를 위한 패턴)
  • 71. 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
  • 72. 그 외 패턴들.. 72 Devpia A&D EVA 4/13/2009
  • 73. 그 외 패턴들.. 73 Devpia A&D EVA 4/13/2009
  • 74. 그 외 패턴들.. 74 Devpia A&D EVA 4/13/2009
  • 75. 5. 패턴 + 생산성 증대. 내 친구.. 를 소개합니다.
  • 76. 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
  • 78. 1. StreoType 생성 Setting – UML – Streotypes 78
  • 79. 2. 클래스 설계 후 StreoType 할당 79
  • 80. 3. 메소드 속성에 맞는 태깅생성 예를 들어 현재 재고를 파악하는 메소드는 Database에서 데이터를 가져오는 (Get) 타입인 경우. 80
  • 81. 4. 코드 생성 탬플릿 작성 Settings – Code Generation Templates 다양한 생성할 코드 언어 선택 입력 생성할 코드 템 플릿 Namespace, Class, Operation 등 스트레오 타입 별 템플릿을 지 정 81
  • 82. 스트레오 타입 코드 템플릿 추가 82
  • 83. 스트레오 템플릿 추가 § Import Section œ DLL 이나 Namespace를 추가하는 부분 § Operation Body œ 메소드 구현 부에 사용자 코드를 추가 함 83
  • 84. 간단한 예 - 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
  • 86. 통합 개발 환경 구축하기 86
  • 87. 통합 개발 환경 구축하기 87
  • 88. 개발 환경 구축 – 프로세스로 디버깅 하기 88
  • 93. Unit Testing과 연동됨 § 현재 xUnit (JUnit, Nunit) 형태로 생성및 관 리가 가능함. § 다른 Unit Test는 Package Script로 연동가 능.
  • 94. Visual Studio.NET 내장 UnitTest (mstest)셋팅 법
  • 96. 참고자료 § 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
  • 97. 참고자료 § “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
  • 98. 참고자료 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)
  • 99. 참고자료 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
  • 100. Question? 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다. This work is licensed under Creative Commons Korea Attribution 2.0 License.