크레이티브 패턴
Creational pattern소프트웨어 공학에서, 창조적인 디자인 패턴은 상황에 맞는 방식으로 물체를 창조하려고 시도하면서 객체 생성 메커니즘을 다루는 디자인 패턴이다.객체 생성의 기본 형태는 설계 문제를 야기하거나 설계에 복잡성을 가중시킬 수 있다.창조적인 디자인 패턴은 이 객체 창조를 어떻게든 제어함으로써 이 문제를 해결한다.
크리에이티브 디자인 패턴은 두 개의 지배적인 아이디어로 구성되어 있다.하나는 시스템이 어떤 콘크리트 클래스를 사용하는지에 대한 지식을 캡슐화하는 것이다.또 하나는 이러한 구체적인 계층의 사례가 어떻게 만들어지고 결합되는가를 숨기는 것이다.[1]
크리에이티브 디자인 패턴은 더욱 객체-크리에이션 패턴과 클래스-크리에이션 패턴으로 분류되는데, 여기서 객체-크리에이션 패턴은 객체 생성과 클래스-인스턴트레이닝을 다룬다.보다 세부적으로 보면, 객체-크리닝 패턴은 객체 생성의 일부를 다른 객체로 지연시키는 반면, 클래스-크리닝 패턴은 객체 생성을 하위 클래스로 지연시킨다.[2]
크리에이티브 패턴의 일부인 잘 알려진 다섯 가지 디자인 패턴은
- 추상적 공장 패턴,[3] 즉 객체의 콘크리트 클래스를 지정하지 않고 관련 또는 종속 객체를 생성하기 위한 인터페이스를 제공한다.
- 동일한 시공 프로세스가 다른 표현을 만들 수 있도록 복잡한 객체의 구조를 표현과 분리하는 빌더 패턴.
- 클래스가 하위 클래스에 인스턴스화를 연기할 수 있는 공장 방식 [4]패턴
- 프로토타입 패턴 - 프로토타입 인스턴스를 사용하여 만들 객체의 종류를 지정하고 이 프로토타입을 복제하여 새로운 객체를 생성한다.
- 클래스가 하나의 인스턴스만 가질 수 있도록 보장하고 클래스에 대한 전역 액세스 지점을 제공하는 싱글톤 패턴.[5]
정의
창조적 패턴은 어떤 시스템을 그것의 물체가 어떻게 생성되고, 구성되고, 어떻게 표현되는지와 분리하는 것을 목표로 한다.그들은 객체 생성의 무엇, 누구, 방법, 시기 측면에서 시스템의 유연성을 증가시킨다.[6]
사용법
현대 소프트웨어 공학은 계급 상속보다 개체 구성에 더 많이 의존하기 때문에, 강조는 하드 코딩하는 행동에서 벗어나 보다 복잡한 행동들로 구성될 수 있는 더 작은 기본 행동들을 정의하는 쪽으로 이동한다.[7]하드 코딩 동작은 설계의 일부를 변경하기 위해 전체 사항을 재정의하거나 재실행해야 하기 때문에 융통성이 없다.또한 하드 코딩은 재사용을 촉진하지 않으며 오류를 추적하는 것을 어렵게 한다.이러한 이유로, 창조적인 패턴은 하드 코딩하는 행동보다 더 유용하다.크리에이티브 패턴은 디자인을 더욱 유연하게 만든다.그들은 그것들을 인스턴스화할 필요가 있는 코드에서 콘크리트 클래스의 명시적인 참조를 제거하는 다른 방법을 제공한다.[8]다시 말해, 그들은 개체와 계층에 대해 독립성을 만들어낸다.
다음과 같은 경우 크리에이티브 패턴을 적용하는 것을 고려하십시오.
- 시스템은 그것의 목적과 제품이 어떻게 생성되는지와 독립적이어야 한다.
- 관련 물체 세트는 함께 사용하도록 설계되었다.
- 클래스 라이브러리 또는 제품의 구현을 숨기고 인터페이스만 표시
- 독립된 복합 객체의 서로 다른 표현 구성.
- 클래스는 하위 클래스가 자신이 만든 객체를 구현하기를 원한다.
- 클래스 인스턴스화는 런타임에 지정된다.
- 단일 인스턴스가 있어야 하며 클라이언트는 항상 이 인스턴스에 액세스할 수 있다.
- 인스턴스는 수정하지 않고 확장할 수 있어야 한다.
구조
아래는 대부분의 크리에이티브 패턴이 공통적으로 가지고 있는 간단한 클래스 다이어그램이다.서로 다른 크리에이티브 패턴은 추가 클래스를 필요로 하며 서로 다른 참여 클래스를 필요로 한다는 점에 유의하십시오.
참가자:
- 작성자:객체 인터페이스를 선언한다.객체를 반환한다.
- ConcretateCreator:개체의 인터페이스 구현
예
크리에이티브 설계 패턴의 일부 예는 다음과 같다.
- 추상적 공장 패턴: 클래스는 객체를 직접 만드는 대신 공장 객체에 필요한 객체를 요청함
- 공장 방식 패턴: 여러 구현 중 하나를 선택하여 특정 유형의 객체 생성을 중앙 집중화
- 빌더 패턴: 동일한 시공 프로세스가 서로 다른 표현을 만들 수 있도록 복합 객체의 구조를 표현에서 분리
- 종속성 주입 패턴: 클래스는 개체를 직접 생성하는 대신 인젝터로부터 필요한 개체를 수락함
- 게으른 초기화 패턴: 객체의 생성, 값 계산 또는 다른 값비싼 프로세스를 처음 필요할 때까지 지연시키는 전술
- 객체 풀 패턴: 더 이상 사용되지 않는 객체를 재활용하여 값비싼 리소스 구입 및 릴리스 방지
- 프로토타입 패턴: 프로토타입 인스턴스에 의해 생성될 객체 유형이 결정될 때 사용되며, 프로토타입은 새로운 객체를 생성하기 위해 복제된다.
- Singleton 패턴: 클래스의 인스턴스화를 하나의 개체로 제한
참고 항목
참조
- ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Design Patterns. Massachusetts: Addison-Wesley. p. 81. ISBN 978-0-201-63361-0. Retrieved 2015-05-22.
- ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Design Patterns. Massachusetts: Addison-Wesley. ISBN 978-0-201-63361-0. Retrieved 2015-05-22.
- ^ Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hendrickson, Mike; Loukides, Mike (eds.). Head First Design Patterns. California: O'Reilly Media. p. 156. ISBN 978-0-596-00712-6. Retrieved 2015-05-22.
- ^ Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hendrickson, Mike; Loukides, Mike (eds.). Head First Design Patterns. California: O'Reilly Media. p. 134. ISBN 978-0-596-00712-6. Retrieved 2015-05-22.
- ^ Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hendrickson, Mike; Loukides, Mike (eds.). Head First Design Patterns. California: O'Reilly Media. p. 177. ISBN 978-0-596-00712-6. Retrieved 2015-05-22.
- ^ Judith, Bishop (2007). C# 3.0 Design Patterns. California: O'Reilly Media. p. 336. ISBN 978-0-596-52773-0. Retrieved 2015-05-22.
- ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Design Patterns. Massachusetts: Addison-Wesley. p. 84. ISBN 978-0-201-63361-0. Retrieved 2015-05-22.
- ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Design Patterns. Massachusetts: Addison-Wesley. p. 85. ISBN 978-0-201-63361-0. Retrieved 2015-05-22.