디자인 패턴(Design patterns) - 적절한 디자인패턴 선택방법과 사용법
Clean Software/Design Pattern

디자인 패턴(Design patterns) - 적절한 디자인패턴 선택방법과 사용법

728x90
반응형

적절한 디자인 패턴을  찾기 위한 접근방법

20여개가 넘는 디자인패턴중에서 특정 설계문제를 해결하기위한 적절한 디자인패턴이 무엇인지 찾기란 여간 어려운일이 아닐 것 같아요. 

내가 발생한 문제에 적합한 디자인 패턴을 찾기 위한 몇가지 다양한 접근방법이 있습니다. 

 

1. 디자인 패턴이 설계 문제해결하는 방법을 고려하자

  • 디자인 패턴이 적절한 객체를 찾고, 객체 세분성을 결정하고, 객체 인터페이스를 지정하고, 디자인 패턴이 설계 문제를 해결하는 다양한 방법을 어떻게 도와주는지 알아야 어떤 패턴을 사용하는것이 좋을지 알수 있습니다.

 

 

이전글 참고

 

2.  디자인 패턴의 존재 의도(Intent) 고려하자

  • 섹션 1.4(8페이지)에는 카탈로그에 있는 모든 패턴의 의도 섹션이 나열되어 있습니다. 각 패턴의 의도를 읽고 문제와 관련된 소리를 하나 이상 찾으십시오. 표 1.1 (10 페이지)에 제시된 분류 체계를 사용하여 검색 범위를 좁힐 수 있습니다.
  1. Abstract Factory :
    • Provide an interface for creating families of related or dependent objects without specifying their concrete classes. (구체적인 클래스를 지정하지 않고, 관련 또는 종속 객체의 패밀리를 생성하기 위한 인터페이스를 제공합니다.)
  2. Builder :
    • Separate the construction of a complex object from its representation so that the same construction process can create different representations. (복잡한 객체의 구성을 해당 표현과 분리하여 동일한 구성 프로세스에서 다른 표현을 생성할 수 있습니다.)
  3. Factory Method :
    • Define an interfa ce for creating an object, but let subcl asses decide which class to instantiate. Factory Method lets a cl ass defer instantiation to subclasses. (객체 생성을 위한 인터페이스를 정의하지만, 서브클래스가 인스턴스화할 클래스를 결정하도록 합니다. 팩토리 메소드를 사용하면 클래스가 인스턴스화를 서브클래스로 연기할 수 있습니다.)
  4. Prototype :
    • Specify the kinds of obj ectsto crea te using a prototypi cal instance, and create new obj ectsby copying this prototype. (프로토타입 인스턴스를 사용하여 생성할 객체의 종류를 지정하고 이 프로토타입을 복사하여 새로운 객체를 생성합니다.)
  5. Singleton :
    • Ensure a class only has one instance, and provide a global point of access to it.  (클래스에 인스턴스가 하나만 있는지 확인하고 이에 대한 전역 액세스 지점을 제공합니다.)
  1. Adapter :
    • Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompat ibleinterfaces. (클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환합니다. 어댑터를 사용하면 호환되지 않는 인터페이스로 인해 다른 방법으로는 할 수 없었던 클래스가 함께 작동할 수 있습니다.)
  2. Bridge :
    • Decouple an abstraction from its implementation so that the two c an vary independently. (두 가지가 독립적으로 변할 수 있도록 구현에서 추상화를 분리합니다.)
  3. Composite :
    • Compose obje cts into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly. (객체를 트리 구조로 구성하여 부분-전체 계층 구조를 나타냅니다. 복합을 사용하면 클라이언트가 개별 개체와 개체 구성을 균일하게 처리할 수 있습니다.)
  4. Decorator :
    • Att achadditional responsibilitie s to an obj ectdynamically. Decorators provide a flexible alternative to subclassing for extending functionality. (대상에 대한 추가적 책임을 동적으로 수행합니다. 데코레이터는 기능 확장을 위해 서브클래싱에 대한 유연한 대안을 제공합니다.)
  5. Facade :
    • Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interf acethat makes the subsystem easier to use. (하위 시스템의 인터페이스 집합에 통합 인터페이스를 제공합니다. Facade는 하위 시스템을 더 쉽게 사용할 수 있도록 하는 상위 수준 인터페이스를 정의합니다.)
  6. Flyweight :
    • Use sharing to support large numbers of fine-grained objects efficiently. (공유를 사용하여 많은 수의 세분화된 개체를 효율적으로 지원합니다.)
  7. Proxy :
    •  Provide a surrogate or placeholder for another object to control access to it.  (다른 개체에 대한 액세스를 제어하기 위해 대리 또는 자리 표시자를 제공합니다.)

 

 

3.  디자인 패턴들이 상호 연관되는 방식을 연구하자

  • 그림 1.1(12페이지)은 디자인 패턴 간의 관계를 그래픽으로 보여줍니다. 이러한 관계를 연구하면 올바른 패턴 또는 패턴 그룹으로 안내하는 데 도움이 될 수 있습니다.
     섹션 1.8 디자인 패턴 사용 방법 29

 

 

4. 비슷한 목적을 가진 설계 패턴들을 연구하자

  • 카탈로그(79페이지)에는 3개의 장이 있는데, 하나는 생성 패턴, 다른 하나는 구조 패턴, 세 번째는 행동 패턴입니다. 각 장은 패턴에 대한 소개 주석으로 시작하여 패턴을 비교하고 대조하는 섹션으로 끝납니다. 이 섹션은 같은 목적의 패턴 간의 유사점과 차이점에 대한 통찰력을 제공합니다. 

 

 

 

5. 재설계(redesign)가 발생되는 원인들을 살펴보자

  • 24페이지에서 시작하는 재설계의 원인을 살펴보고 문제가 그 중 하나 이상과 관련되어 있는지 확인하십시오. 그런 다음 재설계의 원인을 피하는 데 도움이 되는 패턴을 살펴보십시오.
  •  

 

6. 설계에서 가변적이어야 하는 사항들을 살펴보자

  • 이 접근 방식은 재설계의 원인에 초점을 맞추는 것과 반대입니다. 디자인을 강제로 변경할 수 있는 요소를 고려하는 대신 재설계 없이 변경할 수 있는 요소를 고려하십시오. 여기서 초점은 다양한 디자인 패턴의 주제인 다양한 개념을 캡슐화하는 것입니다. 표 1.2에는 디자인 패턴을 사용하여 독립적으로 변경하여 재설계 없이 변경할 수 있는 디자인 측면이 나열되어 있습니다.


 

 

디자인 패턴을 효과적으로 사용하는 방법

 

디자인 패턴을 선택했다면 어떻게 활용할까?

다음은 디자인 패턴을 효과적으로 적용하기 위한 단계별 접근 방식입니다.

 

(step 1) 대락적으로 패턴을 한 번 읽어보자

선택한 패턴이 현재 나의 설계가 직면한 문제에 적합한지 확인하기위해 적용 가능성 및 결과 섹션에 특히 주의하십시오.

 

(step 2) 구조, 참가자 및 협업 섹션을 공부하십시오.

패턴의 클래스와 객체와 이들이 서로 어떻게 관련되어 있는지 이해했는지 확인하십시오.

 

(step 3) 패턴의 구체적인 예를 보려면 샘플 코드 섹션을 보십시오.

코드를 공부하면 패턴을 구현하는 방법을 배우는 데 도움이 됩니다.

 

(step 4) 애플리케이션 문맥에 적합한 패턴 참여자의 이름을 선택세요

디자인 패턴 참가자의 이름은 일반적으로 애플리케이션에 직접 표시하기에는 너무 추상적입니다. 그럼에도 불구하고 참가자 이름을 응용 프로그램에 나타나는 이름에 통합하는 것이 좋습니다. 이는 구현에서 패턴을 보다 명확하게 만드는 데 도움이 됩니다. 예를 들어 텍스트 합성 알고리즘에 전략 패턴을 사용하는 경우 SimpleLayoutStrategy 또는 TeXLayoutStrategy 클래스가 있을 수 있습니다.

 

(step 5) 클래스를 정의합니다.

인터페이스를 선언하고, 상속 관계를 설정하고, 데이터 및 개체 참조를 나타내는 인스턴스 변수를 정의합니다. 패턴이 영향을 미칠 애플리케이션의 기존 클래스를 식별하고 그에 따라 수정하십시오.

 

 

(step 6) 패턴의 작업에 대한 애플리케이션별 이름을 정의합니다.

여기서도 이름은 일반적으로 응용 프로그램에 따라 다릅니다. 각 작업과 관련된 책임 및 협업을 지침으로 사용하십시오. 또한 명명 규칙을 일관되게 유지하십시오. 예를 들어 "Create-" 접두사를 일관되게 사용하여 팩토리 메서드를 나타낼 수 있습니다.

 


(step 7) 패턴에서 책임과 협력을 수행하는 작업을 구현합니다. 

구현 섹션에서는 구현을 안내하는 힌트를 제공합니다. 샘플 코드 섹션의 예제도 도움이 될 수 있습니다.

 

 

 

 

 

 

참고서적 GoF 디자인 패턴

 

728x90
반응형