2016. 1. 13. 19:39ㆍStudy/Design Patterns
1.디자인 패턴이란?
특정한 전후 관계에서 일반적 설계 문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명이다.
일반적으로 하나의 패턴에는 다음 네 가지의 요소가 반드시 들어있다.
- 패턴 이름(pattern name)
- 한두 단어로 설계 문제와 해법을 서술한다.
- 패턴에 이름을 부여하는 것은 설계 어휘를 늘리는 일이며, 높은 수준의 추상화된 설계를 할 수 있다.
- 문서에서 이름을 사용하여 설계의 의도를 표현할 수 있다. 또 설계에 대한 생각을 더욱 쉽게 할 수 있고
개발자들 간의 의사소통이 원활해진다. - 문제(problem)
- 언제 패턴을 사용하는가를 서술하며 해결할 문제와 그 배경을 설명.
- "어떤 알고리즘을 객체로 만들까"와 같은 설계의 세밀한 문제를 설명할 수 있다.
- 문제를 제시함으로써 패턴을 적용하는 것이 의미 있는 사례들을 정의하기도 한다. - 해법(solution)
- 설계를 구성하는 요소들과 그 요소들 간의 관계, 책임 그리고 협력 관계를 서술한다.
- 패턴은 다양한 경우에 적용할 수 있는 템플릿이기 때문에 어떤 구체적인 설계나 구현을 설명하지는 않는다.
- 문제에 대한 추상적인 설명을 제공하고 문제를 해결하기 위해서 클래스나 객체들의 나열 방법을 제공한다. - 결과(consequence)
- 디자인 패턴을 적용해서 얻는 결과와 장단점을 서술한다.
- 패턴의 결과는 시스템의 유연성, 확장성, 이식성 등에 커다란 영향을 준다.
2. 스몰토크 MVC를 사용한 디자인 패턴
MVC는 세 가지 객체로 구성되어 있다.
Model - 응용프로그램 객체
View - 스크린에 모델을 디스플레이하는 방법
Controller - 사용자 인터페이스가 사용자 입력에 반응하는 방법을 정의한다.
MVC의 다른 특징으로는 뷰를 중첩시킬 수 있다.
3. 상속 대 합성
객체지향 시스템에서 기능의 재사용을 위해 구사하는 가장 대표적인 기법은 클래스 상속과 객체 합성(Object Composition)이다.
화이트박스 재사용(white-box reuse) - 서브클래싱에 의한 재사용. 상속을 받으면 부모 클래스의 내부가 서브클래스에 공개된다.
블랙박스 재사용(black-box reuse) - 객체의 내부는 공개되지 않고 인터페이스를 통해서만 재사용된다.
상속의 장점
- 컴파일 시점에 정적으로 정의되고 프로그래밍 언어가 직접 지원하므로 그대로 사용하면 된다.
- 부모 클래스의 구현을 쉽게 수정할 수 있고, 서브클래스는 모든 연산이 아닌 일부만 재정의할 수도 있다.
단점
- 런타임에 상속받은 부모 클래스의 구현을 변경할 수 없다. 상속은 컴파일 시점에 결정되는 사항이기 때문이다.
- 부모 클래스는 서브클래스의 물리적 표현의 최소 부분만을 정의하기 때문에 서브클래스는 부모 클래스가
정의한 물리적 표현 들을 전부 또는 일부만 상속 받는다.
(상속은 캡슐화를 파괴한다고 주장하는 의견도 있다)
클래스 상속보다 객체 합성을 더 선호하는 이유는 각 클래스의 캡슐화를 유지할 수 있고, 각 클래스의 한 가지 작업에 집중할 수 있기 때문이다.
4. 위임(Delegation)
장점
- 런타임에 행동의 복합을 가능하게 하고 복합하는 방식도 변경해 준다.
단점
- 객체 합성을 통해 소프트웨어 설계의 유연성을 보장하는 방법과 동일하게 동적인데다가 고도로 매겨변수화된 소프트웨어는
정적인 소프트웨어 구조보다 이해하기가 더 어렵다.
상속 - 서브클래스에 의해 연산을 구현하는 방법(템플릿 메서드 패턴의 응용)
합성 - 정렬 루틴으로 전달된 객체(전략)
매개변수화 - C++ 템플릿이나 Ada의 제네릭으로 정의한 클래스의 인자로 원소를 비교할 함수 이름을 명시
5. 프레임워크(Framework)
특정한 부류의 소프트웨어에 재사용성을 부여하여 개발할 수 있도록 만들어 주는 관련 클래스들의 집합
패턴과 프레임워크의 차이점
- 디자인 패턴이 프레임워크보다 더 추상적이다
- 프레임워크는 구현을 정의하지만, 패턴은 예만을 코드로 작성한다. - 디자인 패턴은 프레임워크에 비해서 소규모의 아키텍처 요소이다.
- 일반적으로 프레임워크는 여러 디자인 패턴을 포함하지만, 디자인 패턴이 프레임워크를 포함하는 일은 없다. - 디자인 패턴은 프레임워크에 비해 덜 특수화되어 있다.
- 프레임워크는 어떤 특정 응용프로그램 영역을 목표로 한다.
'Study > Design Patterns' 카테고리의 다른 글
2. 추상 팩토리 (Abstract Factory) (0) | 2016.01.14 |
---|