생성 패턴-Factory
Creational pattern(생성 패턴) :
객체의 인스턴스를 생성하는 방법, 프로그래머는 어떻게 객체를 생성하고 배열할지 신경 쓸 필요가 없다
========================================================================================================================
?? Factory Method 패턴 : Factory Method 패턴은 입력 데이터에따라 abstract한 부모 클래스의 여러 서브클래스 중 어떤 것을
반환할지를 결정하는 간단한 클래스를 제공한다. 여러 factory패턴들의 기초로써 Simple Factory 패턴을 우선 살펴볼 것이며,
그리고 나서 Factory Method 패턴을 소개할 것이다.
?? Abstract Factory 패턴 : Abstract Factory 패턴은 관련된 객체들의 여러 묶음(family) 중 하나를 생성하고 반환하는 인터페이스
를 제공한다.
?? Builder 패턴 : Builder 패턴은 복잡한 객체의 생성을 표현(representation)과 분리함으로써, 프로그램의 필요에 따라 여러
다른 표현(representation)이 생성될 수 있도록 해준다.
?? Prototype 패턴 : Prototype 패턴은 새로운 인스턴스를 복사하거나 복제하는 인스턴스화된 클래스를 제공한다. 이러한 인스턴
스는 public 메소드를 사용하여 가공될(tailor) 수 있다.
?? Singleton 패턴 : Singleton 패턴은 하나 이상의 인스턴스가 생성되지 않는 클래스를 말한다. Singleton 패턴은 이러한 인스턴스
에 접근하기 위한 하나의 포괄적인(global) 접근 포인트를 제공한다.
------------------------------------------------------------------------------------------------------------------------
Simple Factory- ex) Factory클래스에서 조건여부 판단하여 두 클래스중 하나의 클래스를 선택해 인스턴스를 반환하는 방법!!
여러 개의 클래스 중 반환할 클 래스를 결정하고 그 클래스를 반환하는 상위 추상(abstraction)클래스를 생성할 수 있다.
그러면 당신은 실제로 당신이 어떤 서브클래스를 사용할지 알 필요 없이 그 클래스 인스턴스의 메소드를 호출할 수 있다.
public class NameFactory {
Namer namer;
// Factory는 쉼표의 유무에 기초해 어떤 클래스가
// 반환될 것인지 결정한다.
public Namer getNamer(String entry) {
//comma determines name order
int i = entry.indexOf(",");
if (i > 0)
return new LastFirst(entry);
else
return new FirstFirst(entry);
}
}
------------------------------------------------------------------------------------------------------------------------
factory 클래스는 교통경찰 같은 역할을 하며, 한 계층의 서브클래스 중 어떤 것이 인스턴스화 될것인지를 결정할 것이다.
------------------------------------------------------------------------------------------------------------------------
Factory Method 패턴은 여러 면에서 쓸모가 많지만, 어떤 서브클래스를 인스턴스화할 것인지를 결정하는 클래스가 없다는 점에서 약간은 난해하다. 슈퍼클래스(superclass)는 이러한 문제에 대한 결정을 서브클래스에게 맡긴다.
패턴에서는 여러 서브클래스들 중 하나의 서브클래스를 선택해 인스턴스화하는 루틴이 존재하지 않는다. 대신에 Factory Method 패턴을 사용한 프로그램은 abstract 클래스를 이용하여 이 문제를 해결한다.
이 abstract 클래스는 객체를 생성하는 틀만을 제공하며 어떤 객체를 생성할 것인 가는 각각의 서브클래스가 결정한다.
------------------------------------------------------------------------------------------------------------------------
다음의 상황에서 Factory 메소드 사용을 고려해야 한다
?? 클래스가 생성해야 하는 객체의 클래스의 종류를 예상할 수 없을 경우
?? 클래스가 자신이 생성하는 객체를 명확히 하기 위해서 서브클래스를 사용할 경우 어떤 클래스가 생성되었는가에 대한 정보를 국한시키기 위해서 부모(base) 클래스는 abstract이고 패턴은 완전히 작동하는(working) 클래스를반환한다.
?? 부모 클래스는 디폴트 메소드를 포함하고, 디폴트 메소드가 불충분할 때는 서브클래스에서 메소드를 추가한다.
?? 여러 클래스 타입 중 어떤 클래스가 반환될 것인지 알려주는 파라미터 들이 factory에 넘겨진다.
이런 경우 클래스들은 같은 메소드 이름을 공유하지만 각각 매우 다른 무언가를 수행할 것이다.