구조패턴
-
[Design Pattern] 플라이웨이트(Flyweight) 패턴 - 디자인 패턴CSE/Design Pattern 2015. 6. 13. 10:40
Pattern #12 플라이웨이트 패턴 본질적인 것과 부가적인 것을 구분하려 할 때 사용 패턴 요약 - 수많은 작은 객체를 생성하여야 할 때 - 사용되는 많은 객체의 생성 관리하는 객체를 따로 두어 이를 통해 필요한 객체를 참조형태로 사용하도록 동기 당신에게 새로 주어진 일은 ‘실시간 전략 시뮬레이션 게임’ 을 개발하는 일이다. 평소에 게이머로서 Starcraft 게임의 재미에 푹 빠져있던 당신은 개발자로써 다시 한번 그 게임에 대하여 놀라게 된다. "아니 어떻게 수 백 개 이상이 되는 많은 캐릭터들이 성능이 뒤떨어진 컴퓨터에서도 무리 없이 병렬적으로 동작을 하는가? 어떻게 설계되었을까?" 당신이 만드는 전략게임에는 ‘병사’, ‘전차’, ‘비행기’ 등이 동시에 수 천 개까지 표현될 수 있어야 한다. "어..
-
[Design Pattern] 브릿지(Bridge) 패턴 - 디자인 패턴CSE/Design Pattern 2015. 6. 13. 10:38
Pattern #11 브릿지 패턴 인터페이스를 실행과 분리하여 클라이언트의 요청에 따라 다르게 사용 패턴 요약 - 클래스를 다른 인터페이스로 변형시키는 면에서 어뎁터 패턴과 유사하게 보임 - 인터페이스와 실행을 분리하여 독립적으로 변할 수 있게 함 동기 XWindow(Unix)와 Presentation manager(OS2) 두 종류의 플랫폼을 지원하기 위하여 GUI 클래스를 그림(a)와 같이 설계하였다. 이후, Icon을 표현하기 위한 클래스인 IconWindow를 추가하려한다. 기존 클래스들과의 관계는? XWindow, Presentation Window 플랫폼을 모두 지원하기 위해서 IconWindow 역시 각 플랫폼에 맞는 구체 클래스가 하위 클래스로 필요하다. 문제점 - 새로운 플랫폼 MS-Wi..
-
[Design Pattern] 프록시(Proxy) 패턴CSE/Design Pattern 2015. 6. 13. 10:37
Pattern #10 프록시 패턴 시간이 많이 소요되는 불필요한 복잡한 객체를 생성하는 시간을 간단한 객체로 줄임 패턴 요약 - 특정 객체에 접근을 조절하기 위하여 대리자(Proxy)를 세움 - 필요할 때만 비싼 대가의 기능을 접근하도록 프록시를 사이에 둠 동기 당신이 이번에 참여한 프로젝트는 그래픽을 지원하는 문서편집기를 업그레이드하는 작업이다. 사용자들이 기존의 문서편집기를 사용할 때가장 큰 불만사항은 파일을 여는데 속도가 너무 느리다는 점이다. 이유를 분석해보니 파일을 열 때 문서에 포함된 그림들을 모두 메모리에 올리고, 또 압축된 그림데이터를 Bitmap으로 변환하는 작업을 수행하기 때문이다. 문서의 모든 그림들을 사용자가 보는 경우는 드물다는 점을 이용하여, 사용자가 실제로 보는 그림(화면에 출..
-
[Design Pattern] 어뎁터(Adapter) 패턴 - 디자인 패턴CSE/Design Pattern 2015. 6. 13. 10:36
Pattern #9 어뎁터 패턴 어플리케이션의 기능을 외부에서 필요한 형태로 수정하여 사용하도록 함 패턴 요약 - 원하는 인터페이스를 추상 클래스로 정의 - 이를 상속하는 어뎁터 클래스를 만들고 이를 요구하는 기능을 가진 클래스(adaptee)와 메시지를 교환하게 함 동기 당신은 금융권 전산화 시스템 개발팀의 일원으로, 통신보안 관련 쪽 개발을 맡았다. 개발 기간이 빠듯하긴 하지만 다행히 다른 프로젝트를 수행할 때 개발해 놓은 통신보안 코드들이 있어서 일정을 맞출 수 있을 것 같다. 그런데 한가지 문제점은, 예전 프로젝트 때 개발된 통신보안 코드들은 A사의 통신 보안 프로토콜 Library를 사용하는데 비하여, 새 프로젝트에서는 B사의 통신 보안 프로토콜 Library를 사용하도록 결정되었다. 재사용하려..
-
[Design Pattern] 컴포지트(Composite) 패턴 - 디자인 패턴CSE/Design Pattern 2015. 6. 13. 10:34
Pattern #8 컴포지트 패턴 객체의 트리를 나타내는데 사용 패턴 요약 - 기본 클래스와 이를 포함하는 컨테이너 클래스를 재귀적인(recursive) 형태로 표현 - 객체들의 집합을 다룰 때 유용 - e.g. 폴더 안의 파일 동기 회사에서 당신이 맡은 업무는 Drawing Tool 을 개발하는 것이다. 이 Drawing Tool은 직선, 사각형, 원 등의 그림을 그릴 수 있으며, 각 개체를 이동 및 속성 수정이 가능하다. 또한 몇 개의 개체를 묶어 하나의 Group 개체로 만들 수도 있다. 이러한 요구사항을 만족하기 위해서 어떻게 그림 개체 클래스들을 설계해야 되는가? 의도 - Part-whole Hierarchy를 표현하기 위하여 객체들을 트리 구조로 구성 - Client가 개개의 객체와 그룹 객체..
-
[Design Pattern] 데코레이터(Decorator) 패턴 - 디자인 패턴CSE/Design Pattern 2015. 6. 13. 10:32
Pattern #7 데코레이터 패턴 런타임에 객체의 기능을 추가하기 위하여 사용 패턴 요약 - 객체에 동적으로 추가적인 기능을 추가 주의 - 다른 객체에 영향을 주지 않으면서 런타임에 개개의 객체에 다른 기능을 추가하고 싶을 때 - 상속은 컴파일 타임에 추가 기능이 확정적 동기 당신은 GUI Framework 설계업무를 맡았다. 화면 구성요소들은 일반적으로 가장 기본적인 화면으로부터 조금씩 모습이나 기능을 확장시켜 나간다. 예를 들면 단순히 특정 영역에 문자열을 보여주는 TextView가 있고, 여기에 스크롤 기능을 추가할 수 있으며, 또한 바깥 테두리효과를 추가할 수 있다. 기본 객체에 조금씩 기능을 추가시켜 나가고자 할 때 적절한 객체지향적 설계는 ? 해결 방안 1 - 상속을 이용하여 조금씩 기능을 ..
-
[Design Pattern] 파써드(Facade) 패턴CSE/Design Pattern 2015. 6. 13. 10:31
Pattern #6 파써드 패턴 클래스 패키지에 인터페이스를 제공하기 위해 사용 패턴 요약 - 패키지의 기능을 제공할 수 있는 유일수단인 인터페이스를 정의 주의 - 클래스들을 패캐지로 구성할 필요는 없음. 하나 이상의 클래스들이 퍼싸드를 위하여 사용될 수도 있음. 동기 당신이 입사해서 처음 맡은 일은 소규모의 프로그램 개발 환경을 만드는 작업이다. 그리고, 이런 유사한 프로젝트들이 많아 이미 회사 내에는 토큰 분석기(Scanner), 문법분석기(Parser), 분석된 코드를 내부 자료구조로 재구성해주는 빌더(Program Node Builder) 등과 기계어코드를 생성하는 코드 생성기(Code Generator)들이 클래스 라이브러리로 개발되어 있다. 그러나, 라이브러리의 각 클래스 기능들을 이해하고, ..