팩토리 메소드 패턴 편집하기

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
2번째 줄: 2번째 줄:
;factory method pattern; factory method, factory pattern
;factory method pattern; factory method, factory pattern
;팩토리 메소드 패턴, 팩토리 메서드, 팩토리 패턴
;팩토리 메소드 패턴, 팩토리 메서드, 팩토리 패턴
* [[생성 패턴]]의 하나
*하위클래스에서 인스턴스 생성하도록 하는 구조
* 하위클래스에서 인스턴스를 생성하도록 하는 구조
*공장에서 제품을 만들어내듯, OO공장 인스턴스가 OO을 만들어내는 구조
* 공장에서 제품을 만들어내듯, OO공장 인스턴스가 OO을 만들어내는 구조
*추상 단계<ref>interface 또는 abstract class</ref>에서는 생성하려는 객체의 클래스를 정확히 지정하지 않음
* 서브클래스에서 오브젝트 생성 방법과 클래스를 결정하도록 강제하는 구조
* 생성 책임을 분리한다.
* 생성 로직을 클라이언트에서 분리한다.
* 생성 대상 클래스의 생성자를 private으로 만든다.
* 생성할 객체를 결정하기 위해 상속을 사용한다.
* 추상 단계<ref>interface 또는 abstract class</ref>에서는 생성하려는 객체의 클래스를 정확히 지정하지 않는다.
* ConcreteCreator 클래스에 오브젝트 생성을 맡긴다.
* 팩토리 메소드 패턴은 [[템플릿 메소드 패턴]]의 특수한 경우이다.


==구조==
[[File:FactoryMethod.svg|400px]]
[[파일:FactoryMethod.svg|420px]]
 
[[File:W3sDesign_Factory_Method_Design_Pattern_UML.jpg]]
* Creator 클래스는, Product1 클래스를 직접 인스턴화하지 않는, Product 객체를 필요로 한다.
* 대신 Creator는 product 객체를 생성하는 개별 factoryMethod()를 참조하는 방식으로는, 인스턴트화할 구체 클래스와 분리된다.
* Creator의 하위클래스들은 인스턴스화할 클래스를 재정의할 수 있다.
* 하위클래스 Creator1는, Product1 클래스를 인스턴화함으로써, factoryMethod()를 구현한다.


==예제 (java)==
==예제 (java)==
<syntaxhighlight lang='java' run>
<source lang='java'>
public class Main {
public static void main(String[] args) {
SedanFactory sedanFactory = new SedanFactory();
Car car = sedanFactory.makeCar();
System.out.println("Type: " + car.getType() );
}
}
 
interface CarFactory {
interface CarFactory {
public Car makeCar();
public Car makeCar();
42번째 줄: 19번째 줄:


class SedanFactory implements CarFactory {
class SedanFactory implements CarFactory {
public Car makeCar() { return new Sedan(); }
public Car makeCar() {
return new Sedan();
}
}
}


class Sedan implements Car {
class Sedan implements Car {
public String getType() { return "Sedan"; }
public String getType() {
return "Sedan";
}
}
}
</syntaxhighlight>
 
public class Main {
public static final void main(String[] args) {
SedanFactory sedanFactory = new SedanFactory();
Car car = sedanFactory.makeCar();
System.out.println("Type: " + car.getType() );
}
}
</source>


==같이 보기==
==같이 보기==
{{z컬럼3|
*[[Template method 패턴]]
* [[DAO]]
*[[Singleton 패턴]]
* [[싱글턴 패턴]]
*[[Composite 패턴]]
* [[디자인 패턴]]
*[[Iterator 패턴]]
* [[의존성 역전]]
*[[디자인 패턴]]
* [[DAOFactory]]
 
* [[컴포지트 패턴]]
==주석==
* [[이터레이터 패턴]]
<references/>
* [[메소드 오버로딩]]
* [[추상 팩토리 패턴]]
* [[템플릿 메소드 패턴]]
}}


==참고==
==참고 자료==
* {{영어위키백과|Factory method pattern}}
*http://en.wikipedia.org/wiki/Factory_method_pattern


[[분류: 디자인 패턴]]
[[분류: 디자인 패턴]]

제타위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 제타위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 편집 도움말 (새 창에서 열림)