디자인 패턴
▼디자인 패턴
자주 사용하는 실제 형태를 정형화하여 유형별로 설계 템플릿을 만들어 두고 소프트웨어 개발 중 나타나는 과제를 해결하기 위한 방법 중 한가지이다. 다양한 응용 소프트웨어 시스템들을 개발할 때 서로 간에 공통되는 설계 문제가 존재하는데, 각 해결책 사이에도 공통점이 있으며 이러한 유사점을 패턴이라고 한다. 이러한 패턴은 개발자 간의 원활한 의사소통, 소프트웨어 구조파악에 용이하며, 유지보수성, 운용성 등 소프트웨어 품질 향상에 도움을 준다. 객체지향 프로그래밍 설계 시 유사한 상뢍에서 구조적인 문제를 해결할 수 있도록 방안을 제공해 주며, Gof(Gang of Four)분류가 가장 많이 사용된다.
★디자인 패턴을 사용할 떄의 장·단점
장점
- 개발자 간의 원활한 의사소통 지원.
- 소프트웨어의 구조 파악 용이
-- 설계 변경 요청에 유연한 대처 가능
- 재이용을 통한 개발 시간 단축
- 객체지향 설계 및 구현의 생상성을 높이는데 적합
단점
- 객체지향 설계/구현 위주로 사용된다.
- 초기 투자 비용 부담이 크다.
▼디자인 패턴의 구성요소
★필수요소
패턴의 이름: 패턴을 부를 때 사용하는 이름과 패턴의 유형
문제 및 배경: 패턴이 사용되는 분야 또는 배경, 해결되는 문제를 의미
해법: 패턴을 이루는 요소들, 관계, 협동 과정
결과: 패턴을 사용하면 얻게 되는 이점
★추가요소
알려진 사례 : 적용사례
샘플 코트 : 패턴이 적용된 원시코드
원리, 정당선, 근거, 출처
★Gof(Gang of Four) 디자인 패턴
애릭 감마, 리처드 헬름, 랄프 존슨, 존 브리시데스가 제안한 디자인 패턴으로 객체지향 설계 단계 중 재사용에 대한 유용한 설계를 디자인 패턴화 하였다. 생성 패턴, 구조 패턴, 행위 패턴드로 분류된다.
★생성배턴
객체를 생성하는 것과 관련된 패턴이며 객체의 생성과 변경이 전체 시스템에 미치는 영향을 쵯소화 하도록 만들어 주어 유연성을 높일 수 있고 코드를 유지하기가 쉬운 편이다.객체의 생성과 참조 과정을 추상화 함으로서 시스템을 개발할 떄 부담을 줄여준다.
종류 | 설명 |
Factory Method | 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고 하위 클래스에서 인스턴스를 생성하도록 하는 방식이다. Virtual-Constructor 패턴이라고도 한다. |
Singleton | 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 한다. 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴이다. |
Prototype | prototype을 먼저 생성하고 인스턴스를 복제하여 사용하는 구조이다. 일반적인 방법으로 객체를 생성하며, 비용이 많이 소모되는 경우 주로 사용된다. |
Builder | 작게 분리된 인스턴스를 조립하듯 조합하여 객체를 생성한다. |
Abstraction Factory | 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴이다. 관련된 서브 클래스를 그룹지어 한 번에 교체할 수 있다. |
★구조 패턴
클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다. 복잡한 형태의 구조를 갖는 시스템을 개발하기 쉽게 만들어주는 패턴이다. 새로운 기능을 가진 복합 객체를 효과적으로 작성할 수 있다.
구성: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
adapter 패턴: 한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다.어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.
bridge 패턴: 기능 클래스 계층과 구현 클래스 계층을 연결하고, 구현부에서 추상 계층을 분리하여 각자 독립적으로 변형 할 수 있도록 해주는 패턴이다.
★행위 패턴
반복적으로 사용되는 객체들의 상호작용을 패턴화 한 것으로, 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의한다. 메세지 교환과 관련된 것으로 객체 간의 행위나 알고리즘 등과 관련된 패턴을 말한다.
★디자친 패턴 vs 아키텍쳐 패턴
아키텍처 패턴: 시스템 전체 구조를 설계하기 위한 참조모델. 기본적으로 상위 설계에 이용된다.
디자인 패턴: 서브 시스템 내 컴포넌트와 그들 간의 관계를 구성하기 위한 참조 모델