객체지향 방법론의 가장 큰 장점인 재사용성과 모듈성을 극대화시켜 실제 구현 과정에서의 해결 방안으로 제시 가능한 것으로 이를 적용하면 시스템 개발은 물론 유지 보수에서도 큰 효과가 있다.
- 상위 단계에서 적용될 수 있는 개념
- 디자인뿐만 아니라 시스템 구조를 재사용 하기 쉽게 만들 수 있다.
- 개발에 따른 산출 문서를 보다 향상시킬 수 있다.
- 불명확한 클래스의 기능, 객체간의 부적절한 연관 관계 등을 제거해 현존하는 시스템에 대한 유지 보수도 용이하다.
- 제대로 만들어진 디자인을 보다 빠르게 얻어낼 수 있는 이점이 있다.
- 일반적인 설계 문제에 대한 솔루션을 제공하는 객체와 클래스와의 연관 관계를 묘사한 것이다.
[패턴의 분류와 종류]
기본 패턴(Fundamental Design Patterns)
디자인 패턴 중에서도 가장 기본인 동시에 가장 중요한 패턴
종류 : 델리게이션(Delegation) 패턴, 인터페이스 패턴, 이뮤터블(Immutable)패턴, 마커 인터페이스(Marker Interface) 패턴, 프록시(Proxy) 패턴 등
생성 패턴(Creational Patterns)
객체의 생성 방식을 결정하는데 포괄적인 솔루션을 제공하는 패턴
클래스 정의와 객체 생성 방식을 구조화, 캡슐화하는 방법을 제시한다.
객체 생성 과정을 추상화시킨다는 특성을 갖고 있으며 클래스의 재사용을 위해 상속보다는 컴포지션 기법을 보다 많이 사용한다.
기본원리
① 시스템에서 사용하는 클래스 정보를 캡슐화
② 클래스에 의해 객체가 생성되는 방식
이점 : 전체적인 시스템 구성의 유동성이 향상되어 객체 행성 방식이 다양한 구조로 진행될 수 있다. 예를 들어, 객체의 구성을 컴파일 타임에 정적으로 정의할 수 있으며 필요에 따라 런타임에 동적으로 구성할 수 있다.
종류 : 팩토리 메쏘드(Factory Method) 패턴, 추상화 팩토리(Abstract Factory) 패턴, 프로토타입(Protytype) 패턴, 싱글턴(Singleton) 패턴, 오브젝트 풀(Object Pool) 패턴 등
분류 패턴(Partitioning Patterns)
분석 단계에서 일반적으로 생기는 문제를 해결하는데 적합하다.
복잡한 행위자(Actors)를 분류하거나 비교적 큰 기능을 분류해 여러 클래스로 정의하는 방식을 제시한다.
종류 : 계층적 초기화(Layered Initialization) 패턴, 필터(Filter) 패턴, 컴포지트(Composite) 패턴 등
구조화 패턴(Structural Patterns)
다른 기능을 가진 객체가 협력을 통해 어떤 역할을 수행할 때, 객체를 조직화시키는 일반적인 방식을 제시한다.
클래스와 객체가 보다 대규모 구조로 구성되는 방법에 대한 해결안을 제시한다.
별도로 구성된 클래스 라이브러리를 통합하는데 유용하다.
생성 패턴과 달리 새로운 기능을 구현하기 위해 객체를 구성하는 방식 자체에 초점이 맞춰져 있다.
런타임에 객체 컴포지션 구조를 변경할 수 있으며, 이를 통해 객체 구성에 유동성과 확작성을 추가할 수 있다.
종류 : 어댑터(Adapter) 패턴, 이터레이터(Iterator) 패턴, 브리지(Bridge) 패턴, 퍼케이드(Facade) 패턴, 플라이웨이트(Flyweight) 패턴, 디이나믹 링키지(Dynamic Linkage) 패턴, 가상 프록시(Virtual Proxy) 패턴 등
행위 패턴(Behavioral Patterns)
객체의 행위를 조직화(organize), 관리(manage), 연합(combine)하는데 사용되는 패턴
객체간의 기능을 배분하는 일과 같은 알고리즘 수행에 주로 이용된다.
단지 객체나 클래스에 대한 유형을 정의하는 것이 아니라 그들 간의 연동에 대한 유형을 제시한다.
런타임에 따르기 어려운 복잡한 제어 흐름을 결정짓는데 사용할 수 있다.
객체의 인터커넥트(intercnnnect)에 초점을 맞춘 패턴