Head First Design Patterns 책을 이용하여 Design Pattern을 한번 공부해 보기로 했다.
공부 전에 간단히 Design Pattern에 대해서 알아보자.
Design Pattern은 여러 가지 문제에 대한 설계 사례들을 분석해서 서로 비슷한 문제를 해결하기 위한 설계들을 분류하고, 각 문제 유형별로 가장 적합한 설계를 일반화 시켜 패턴으로 정립한 것이다.
이런 디자인패턴은 건축학에서 최초 유래되었다. 건축학에서 설계하여 디자인등을 통해 진행시 반복적으로 발생하는 사례들을 분석하여 가장 적합한 설계를 일반화 시키면서 시작되었다고 봐도 무방하다.
즉, 어떤 류의 문제를 해결하기 위한 사용되는 일반적 기술인데, 이 것이 해결 방법 그 자체가 아니라 해결 방법의 일반 구조이다.
패턴은 위에서 반복적으로 발생하는 사례를 분석하여 일반화 한것이라고 말했듯이 누군가가 발명한 것이 아니다. 발견되는 것이라고 생각하면 된다. 이러한 발견은 성공적인 프로젝트의 프로그램에서 반복적으로 발견된 것들이라고 알 수 있다.
디자인패턴을 사용함으로써 문제 해결을 위한 검증되고 정형화 된 틀을 제공한다. 또한 객체 지향 방법에 적합한 소프트웨어를 작성하는데 안내자 역할을 수행한다.
그렇다면 디자인패턴은 어떠한 장점을 가지고 있는 것인가?
장점은 크게 두가지로 나뉠 수 있다.
의사소통의 경제성 |
디자인의 경제성 |
통일된 의사소통 수단 제공 |
해법을 찾기 위한 불필요한 논쟁 해소 새로운 해법을 습득하는데 소요되는 시간 절약 검증된 패턴의 적용으로 시스템 안정성과 성능 향상 기대 |
통일된 의사소통 수단을 제공한다는 것은 예를 들어 개발자간 의사소통시에 " 이 인터페이스들은 다음의 두 서브시스템 간의 브리지를 구성하며, 브리지 자체는 객체 어댑터들의 집합으로 구현됩니다." 의사소통을 가능하게 한다.
많은 사람들이 디자인패턴을 공부하고 적용할려고 노력한다. 하지만 디자인패턴이 항상 최고의 문제 해결 방법을 위한 길은 아니다. 패턴 자체가 시스템을 충분히 복잡하게 만들 수 있다. 그러므로 장단점을 고려 후 도입을 하여야 하며, 충분히 이해가 부족한 상황에서 무작정 적용을 하려하면 안된다. 꾸준히 경험을 토대로 올바른 패턴을 선택하여 적용하는 것 또한 중요한 것이다.
위 그림은 프로젝트 진행시 Workflow와 그 Work를 진행하는 Worker들을 그려놓은 것이다.
분석, 설계, 디자인, 구현으로 크게 나눠놓았으며 각각 Analyst, Architect, Designer, Developer의 Worker들이 일을 한다.
각 Worker들이 사용하는 Pattern들에 대하여 한번 알아보고 지나가자
Architectural Pattern |
시스템 전체(SW, HW포함) 디자인에 대한 선명한 윤곽 제시. 소프트웨어 구조의 수립 단계에서 시스템 아키텍트에 의해 설계 시스템의 포괄적이고 근본적인 문제를 커버한다. (시스템의 문제 영역에 대한 큰 구멍 해결) 정교한 설계 접근이 필요 (한번 설계된 패턴의 수정은 시스템 전체에 영향) |
Design Pattern |
중간 수준의 소프트웨어 구조의 윤곽 제시 디자이너에 의해 작성 됨. 컴포넌트 혹은 클래스를 식별, 그들간의 관계 정의 |
Micro Pattern |
시스템 설계에서 최하위 수준의 문제영역 커버 개발 언어에 종속적인 문제 해결 방법, 즉 코딩 영역에서 고민되는 패턴 |
디자인패턴을 처음으로 공식적으로 정리하고, 23개의 디자인 패턴들로 구성한 사람들이 있다. 사람들이 고프(GOF)라고 부르는 소리를 들어본 적이 있을 지도 모른다.
GOF는 처음으로 디자인패턴을 공식적으로 정리한 사람들이다. 아래는 GOF(Gang of Four)의 사진이다.
이 사람들이 디자인 패턴에 대해 정리하고 3가지 규칙 또한 발표하였다.
1. 구현 클래스가 아니라 인터페이스를 가지고 프로그래밍
2. 상속(Inheritance)이 아니라 위임(Delegation)을 이용
3. 결합도를 최소화 함으로써 추후의 변화를 국부화 한다.
23개의 디자인패턴을 목적과 영역에 따라 나누어 놓았다. 그 표는 아래와 같다.
이정도로 간단하게 디자인패턴에 대해 정리하고, 다음부터는 각각의 디자인패턴에 대해 상세하게 알아보자 !
'Software Architecture > Design Pattern' 카테고리의 다른 글
[Design Pattern] Iterator Pattern (0) | 2018.12.18 |
---|---|
[Design Pattern] Template Method Pattern (0) | 2018.12.15 |
[Design Pattern] Null Object Pattern (0) | 2017.02.20 |
[Design Pattern] Observer Pattern (0) | 2014.07.19 |
[Design Pattern] Strategy pattern (0) | 2014.07.15 |