728x90
Q. 디자인 패턴이란?
프로그램을 설계할 때 발생했던 문제점들을 객체 간 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약' 형태로 만들어 놓은 것을 의미한다.
Q. Creational Pattern (생성패턴) 이란?
생성 패턴이란 객체의 생성에 관련된 패턴으로 기존 코드의 유연성과 재사용을 증가시키는 객체 생성 메커니즘을 제공한다.
생성 패턴의 종류로
1. Factory Method Pattern
2. Abstract Factory Pattern
3. Builder Pattern
4. Prototype Pattern
5. Singleton Pattern
이 있다.
1. Factory Method (팩토리 매서드)
팩토리 매서드는 수퍼클래스에서 객체 생성을 위한 인터페이스를 제공하고 이를 서브클래스에서 객체 생성처리(구체화)를 하는 패턴이다.
- Product
: 팩토리 매서드로 생성될 객체의 공통 인터페이스 - ConcreteProduct
: 구체적으로 객체가 생성되는 클래스 - Creator
: 팩토리 매서드를 갖는 클래스. 매서드 리턴 타입이 Product 인터페이스와 일치해야 한다.
Creator를 추상 클래스로 정의하고 팩토리 매서드를 'abstract'로 선언하거나, 팩토리 매서드를 기본 product 타입으로 제공하는 방법이 있다. - ConcreteCreator
: 팩토리 매서드를 override하는 클래스로 ConcreteProduct 객체를 생성
적용
- 정확한 타입과 어떠한 객체의 종속성 가지고 있는지 구체적으로 모를 때 사용하면 좋다.
- 내부 컴포넌트들을 확장하기 위한 방법으로 자신의 라이브러리 또는 프레임워크를 사용자에게 제공하려는 경우 사용한다.
- 매번 재구축하는 대신 기존 객체를 재사용하여 시스템 리소스를 절약하려는 경우 사용한다.
2. Abstract Factory (추상화 팩토리 패턴)
구체적인 클래스를 정의하지 않고 관련있는 객체군들을 인터페이스로 규격화 하여 제공하는 패턴이다.
관련된 객체군들의 각각의 개별 객체에 대한 인터페이스를 명시적으로 선언하고, 그 객체의 모든 변형이 이 인터페이스를 따르도록 한다.
- AbstractProduct
: 제품군을 구성하는 별개의 관련 제품들에 대한 인터페이스를 선언한다. - ConcreteProduct
: 구체적으로 생성할 객체를 정의한다. AbstractProduct가 정의하는 인터페이스를 구현한다 . 각 추상 제품(ex.의자/소파)은 주어진 모든 변형(Victorian/Modern)으로 구현되어야 한다. - AbstractFactory
: 각각의 추상 제품들을 생성하기 위한 메소드 집합을 선언한다. - ConcreteFactory
: 추상 팩토리의 생성 방법을 구현한다. 각각의 ConcreteFactory는 제품의 특정 변형에 해당하며 해당 제품 변형만 생성한다. - Client
: AbstractFactory와 AbstractProduct 클래스에 선언된 인터페이스를 사용한다.
728x90