원본 : http://www.yunsobi.com/tt/subby/141

객체지향 방법론의 가장 큰 장점인 재사용성과 모듈성을 극대화시켜 실제 구현 과정에서의 해결 방안으로 제시 가능한 것으로 이를 적용하면 시스템 개발은 물론 유지 보수에서도 큰 효과가 있다.     

  • 상위 단계에서 적용될 수 있는 개념          
  • 디자인뿐만 아니라 시스템 구조를 재사용 하기 쉽게 만들 수 있다.          
  • 개발에 따른 산출 문서를 보다 향상시킬 수 있다.          
  • 불명확한 클래스의 기능, 객체간의 부적절한 연관 관계 등을 제거해 현존하는 시스템에 대한 유지 보수도 용이하다.          
  • 제대로 만들어진 디자인을 보다 빠르게 얻어낼 수 있는 이점이 있다.          
  • 일반적인 설계 문제에 대한 솔루션을 제공하는 객체와 클래스와의 연관 관계를 묘사한 것이다.

[패턴의 분류와 종류]


기본 패턴(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)에 초점을 맞춘 패턴     
  • + Recent posts