Prototype Pattern
Prototype pattern
creates objects by cloning an existing object.
생성자를 사용하여 instance 를 생성하는 경우에는 클래스 이름(타입)을 반드시 지정해야 한다.
그러나 아래의 경우에는 타입 없이 클래스를 생성하는 것을 고려해 볼 만 하다.
- 취급하는 객체의 종류가 너무 많고 각각을 별도 클래스로 만들어 관리해야 하는 경우
- instance가 복잡한 과정을 거쳐 생성되어 클래스로부터 만들기 어려운 경우
- instance를 특정 클래스에 의존하지 않고 framework 상에서 추상적으로 다루고 싶은 경우
이러한 경우 ‘모형’ 이 되는 instance를 등록해 두고, 이를 복사하여 인스턴스를 생성할 수 있다.
클래스 타입으로부터의 속박을 풀어주는 역할로도 쓰기 좋다.
- Prototype : 모형 혹은 모범
- clone : 복제
UML
구성 요소
Prototype
: clone 할 객체의 interface를 결정ConcretePrototype
: 자신을 복제 생성하는clone()
을 구현.Client
:Prototype
instance를 생성하는 책임을 가짐.ConcretePrototype
에 대해 모른다.
관련 패턴
- FlyWeight : 하나의 인스턴스를 여러 곳에서 공유해서 이용
- Memento : 스냅샷/undo 를 위해 현재 인스턴스의 상태를 저장
- Composite : 복잡한 구조의 인스턴스가 동적으로 만들어질 때
prototype
활용 가능 - Decorator : 복잡한 구조의 인스턴스가 동적으로 만들어질 때
prototype
활용 가능 - Command : 명령을 복제하고 싶은 경우
prototype
패턴 사용