2012년 4월 24일 화요일

[Java Design Pattern_4]Factory Method 설명


# Factory Method
- 하위 클래스에서 인스턴스 작성하기


@ Factory Method 패턴

- Template Method 패턴을 인스턴스 생성에 적용한 것이 Factory Method패턴이다.

- 인스턴스 생성을 위한 골격(framework)와 실제의 인스턴스 생성의 클래스를 분리해서 생각할수 있습니다. 인스턴스를 만드는 방법을 상위 클래스 측에서 결정, 구체적인 내용은 모두 하위 클래스 측에서 수행합니다.


@ Factory Method 패턴의 등장인물

1. Framework

 - Product(제품)  : framework 쪽의 클래스로서 만들고자(생산)하는 클래스의 API를 결정하는 추상 클래스 입니다. 구체적인 내용은 ConcreteProduct에서 구현합니다.

 - Creator(작성자) : Product를 생성하는 추상 클래스입니다. Creator가 가지고 있는 정보는 Product 역할과 인스턴스 생성 메소드뿐입니다.
  * new 를 사용해서 실제의 인스턴스를 생성하는 대신에, 인스턴스 생성을 위한 메소드를 호출해서 구체적인 클래스 이름에 의한 속박에서 상위 클래스를 자유롭게 만듭니다.

2. idcard(Concrete)

 - ConcreteProduct(구체적인 제품) : 구체적인 제품 클래스.

 - ConcreteCreator(구체적인 작성자) : 구체적인 제품을 만드는 클래스.


@예제

-  구조




1. Framework

 - Product  클래스 : '제품'을 표현한 추상 클래스로서 추상 메서드 use만 선언 되어 있다.

 - Factory 클래스 : 템플릿 패턴이 적용되어 있습니다. 추상 메서드  createProduct,registerProduct는 하위 클래스에서 구현 합니다. create 메서드는 Product의 인스턴스를 생성하는 것으로 규정하고 있습니다. 즉, createProduct에서 제품을 만들어서 registerProduct에서 등록한다고 규정하고 있습니다.

2. Idcard

- IDCard 클래스 : Product 클래스를 상속받아서 구현

- IDCardFactory : Factory 클래스를 상속받아서 구현.
                         (createProduct, registerProduct 메소드 구현)


3. Main

 - Main 클래스 : 실행 클래스


@ Think!!

 1. Framework와 Idcard 패키지를 의존하고 있지 않다.

- '추상적인 골격' '구체적인 내용'의 두가지 측면으로 Factory Method를 살펴 보았습니다. 위와 달리 IDCard외 Television을 만든다고 가정하면, TelevisionFactory 클래스(Factory 상속)와 Television 클래스(Product 상속)만 만들면 새로운 객체에 적용할 수 있습니다. 이때 Framework의 클래스(Factory, Product)는 수정할 수 필요가 없습니다.

2. 인스턴스 생성  - 메소드의 구현 방법(createProduct 메소드)

- 추상 메소드로 한다.

- 디폴트의 구현을 준비해 둔다. : 하위 클래스에서 구현하지 않았을 경우를 염두해 둔 코드. 이때 Product는 추상 클래스로 만들지 못한다.

- 에러를 이용한다.  : 하위 클래스가 구현하지 않으면 에러가 발생하도록 해둔 코드.
 [FactoryMethodRuntimeException은 별로 작성되어 있다고 가정]

댓글 없음:

댓글 쓰기