# 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은 별로 작성되어 있다고 가정]
댓글 없음:
댓글 쓰기