객체지향 소프트웨어를 설계하는 것은 쉬운 일이 아니다. 게다가, 재사용할 수 있는 객체지향 소프트웨어를 만드는 것은 더욱 힘든 일이다.
이처럼 힘든 일인 올바른 객체지향 소프트웨어를 만드는 것을 보다 쉽게 할 수 있게끔 도와주는 것이 있는데, 이것이 바로 디자인 패턴이다. 지금부터 디자인 패턴이 무엇인지 알아보자.
"각 디자인 패턴은 기존 환경 내에서 반복적으로 일어나는 문제들을 설명한 후, 그 문제들에 대한 해법의 핵심을 설명해 줍니다. 똑같은 방법으로 두 번 하지 않고 이 해법을 100만 번 이상 재사용할 수 있도록 말이죠."
- 건축가이자 패턴의 아버지, 크리스토퍼 알렉산더 -
디자인 패턴이란?
· 특정한 전후 관계에서 일반적 설계 문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명.
· 설계에서 얻은 세세한 경험들을 다른 사람이 응용하기 좋도록 자세히 기록한 것.
패턴에 들어가는 네 가지 요소
· 패턴 이름(Pattern name)
패턴 이름은 한두 단어로 설계 문제와 해법을 서술함. 패턴의 의도를 표현하고 설계에 대한 생각을 쉽게 함.
· 문제(Problem)
문제는 언제 패턴을 사용하는 가를 서술하며 해결할 문제와 그 배경을 설명함.
· 해법(Solution)
해법은 설계를 구성하는 요소들과 그 요소들 간의 관계, 책임 그리고 협력 관계를 서술함.
구체적인 부분을 제시하지 않고 문제에 대한 추상적인 설명을 제공하고 문제를 해결하기 위해서 클래스나 객체들의 나열 방법을 제공함.
· 결과(Consequence)
결과는 디자인 패턴을 적용해서 얻는 결과와 장단점을 서술함. 소프트웨어에서의 결과란 가끔 시간이나 공간 사이의 균형일 수도 있음. 즉, 시간을 중요한 요소로 볼 것인지 저장 공간의 효율을 중요한 요소로 볼 것인지에 따라 다른 설계 방법을 선택해야 함.
패턴 분류 기준
· 목적(purpose)
· 범위(scope)
목적
패턴이 무엇을 하는지 정의 하는 것.
크게 생성, 구조, 행동 중의 하나의 목적을 가짐.
· 생성
객체의 생성 과정에 관여하는 패턴.
· 구조
클래스나 객체의 합성에 관한 패턴.
· 행동
클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의하는 패턴.
범위
패턴을 주로 클래스에 적용하는지 아니면 객체에 적용하는지를 구분하는 것.
크게 클래스 패턴과 객체 패턴으로 구분.
· 클래스 패턴
클래스와 서브클래스 간의 관련성을 다루는 패턴.
관련성은 주로 상속이며 컴파일 타임에 정적으로 결정
· 객체 패턴
객체 관련성을 다루는 패턴.
런타임에 변경할 수 있으며 더 동적인 성격을 가짐.
[참고] GoF의 디자인 패턴
'프로그래밍 > 디자인 패턴' 카테고리의 다른 글
싱글턴(Singleton) 패턴 (0) | 2017.12.13 |
---|---|
추상 팩토리(Abstract Factory) 패턴 (0) | 2017.12.13 |
팩토리 메서드(Factory Method) 패턴 (0) | 2017.12.04 |
데코레이터(Decorator) 패턴 (0) | 2017.12.01 |
옵저버(Observer) 패턴 (0) | 2017.11.28 |
WRITTEN BY
- 김치치즈스마일
세계정복!