객체지향 소프트웨어를 설계하는 것은 쉬운 일이 아니다. 게다가, 재사용할 수 있는 객체지향 소프트웨어를 만드는 것은 더욱 힘든 일이다.

이처럼 힘든 일인 올바른 객체지향 소프트웨어를 만드는 것을 보다 쉽게 할 수 있게끔 도와주는 것이 있는데, 이것이 바로 디자인 패턴이다. 지금부터 디자인 패턴이 무엇인지 알아보자.

 

"각 디자인 패턴은 기존 환경 내에서 반복적으로 일어나는 문제들을 설명한 후, 그 문제들에 대한 해법의 핵심을 설명해 줍니다. 똑같은 방법으로 두 번 하지 않고 이 해법을 100만 번 이상 재사용할 수 있도록 말이죠."

- 건축가이자 패턴의 아버지, 크리스토퍼 알렉산더 -

 

디자인 패턴이란?

· 특정한 전후 관계에서 일반적 설계 문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명.

· 설계에서 얻은 세세한 경험들을 다른 사람이 응용하기 좋도록 자세히 기록한 것.

 

패턴에 들어가는 네 가지 요소

· 패턴 이름(Pattern name)

패턴 이름은 한두 단어로 설계 문제와 해법을 서술함. 패턴의 의도를 표현하고 설계에 대한 생각을 쉽게 함.

 

· 문제(Problem)

문제는 언제 패턴을 사용하는 가를 서술하며 해결할 문제와 그 배경을 설명함.

 

· 해법(Solution)

해법은 설계를 구성하는 요소들과 그 요소들 간의 관계, 책임 그리고 협력 관계를 서술함.

구체적인 부분을 제시하지 않고 문제에 대한 추상적인 설명을 제공하고 문제를 해결하기 위해서 클래스나 객체들의 나열 방법을 제공함.

 

· 결과(Consequence)

결과는 디자인 패턴을 적용해서 얻는 결과와 장단점을 서술함. 소프트웨어에서의 결과란 가끔 시간이나 공간 사이의 균형일 수도 있음. 즉, 시간을 중요한 요소로 볼 것인지 저장 공간의 효율을 중요한 요소로 볼 것인지에 따라 다른 설계 방법을 선택해야 함.

 

패턴 분류 기준

· 목적(purpose)

· 범위(scope)

 

목적

패턴이 무엇을 하는지 정의 하는 것.

크게 생성, 구조, 행동 중의 하나의 목적을 가짐.

 

· 생성

객체의 생성 과정에 관여하는 패턴.

· 구조

클래스나 객체의 합성에 관한 패턴.

· 행동

클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의하는 패턴.

 

범위

패턴을 주로 클래스에 적용하는지 아니면 객체에 적용하는지를 구분하는 것.

크게 클래스 패턴과 객체 패턴으로 구분.

 

· 클래스 패턴

클래스와 서브클래스 간의 관련성을 다루는 패턴.

관련성은 주로 상속이며 컴파일 타임에 정적으로 결정

 

· 객체 패턴

객체 관련성을 다루는 패턴.

런타임에 변경할 수 있으며 더 동적인 성격을 가짐.

 

 

[참고] GoF의 디자인 패턴

 

 

 


WRITTEN BY
김치치즈스마일
세계정복!

,