프로그래밍/DesignPattern

팩토리 - 팩토리 메소드 패턴

모지사바하 2007. 7. 15. 21:53

팩토리 패턴(사실 간단한 팩토리는 디자인 패턴이라고 할수 없다)

모든 팩토리 패턴에서는 객체 생성을 캡슐화한다.

장점 : 객체를 인스턴스화하는 작업을 한 클래스에 캡슐화시켜 놓으면 구현을 변경해야 하는 경우에 여기저기 다 들어가서 고칠 필요 없이 팩토리 클래스 하나만 고치면 된다


팩토리 메소드 패턴의 정의 :

팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스(추상메소드)를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이다.


객체를 인스턴스화하는 일을 하는 메소드(팩토리 클래스로 캡슐화 된 메소드)를
생성된 객체를 사용할 클래스에 추상메소드로 만든다. 물론 해당 클래스는 추상클래스가 된다.

팩토리 메소드는 객체 생성을 처리하며, 팩토리 메소드를 이용하면 객체를 생성하는 작업을 서브클래스에 캡슐화시킬 수 있다.
이렇게 하면 수퍼클래스에 있는 클라이언트 코드와 서브클래스에 있는 객체 생성 코드를 분리 시킬수 있다.

ex source) ①abstract ②Product ③factoryMethod(④String type)

① 팩토리 메소드는 추상 메소드로 선언하여 서브클래스에서 객체 생성을 책임지도록 한다.
② 팩토리 메소드에서는 특정 제품(객체)를 리턴하며, 그 객체는 보통 수퍼클래스에서 정의한 메소드 내에서 쓰이게 된다.
③ 팩토리메소드는 클라이언트에서 실제로 생성되는 구상객체가 무엇인지 알 수 없게 만드는 역할도 한다.
④ 팩토리 메소드를 만들 때 매개변수를 써서 만들어낼 객체 종류를 선택할 수 도 있다.