Prototype

[Swift 디자인 패턴] Prototype Pattern (프로토타입) - 디자인 패턴 공부 5

Intent

**Prototype**은 기존 객체의 클래스에 종속되지 않고 기존 객체를 복사할 수 있는 창의적인 디자인 패턴입니다.

https://refactoring.guru/images/patterns/content/prototype/prototype.png?id=e912b1ada20bbf7b2ffc09e93b9fab20

Problem

객체가 있는데 그 객체의 정확한 복사본을 만들고 싶다고 가정해 보십시오.

그걸 어떻게 하시겠어요?

→ 먼저 **동일한 클래스의 새 개체**를 만들어야 합니다.

→ 그런 다음 원래 개체의 모든 필드를 살펴보고 해당 값을 새 개체에 복사해야 합니다.

단점

https://refactoring.guru/images/patterns/content/prototype/prototype-comic-1-en.png?id=4cc45ae42e26cc9533a6ac540713d1fa

개체를 "외부에서" 복사하는 것이 항상 가능한 것은 아닙니다.

Direct approach에는 한가지 문제가 더 있다. copy를 하려면 객체의 클래스를 알아야 하므로 코드는 해당 클래스에 종속된다.

만약 추가적인 의존이 문제가 없다면, 다른 함정일 수 있다.

ex) 메서드의 매개 변수가 특정 인터페이스를 따르는 객체를 허용할 때 객체가 따르는 인터페이스만 알고 **concrete class**는 모르는 경우가 있다.

Solution

Prototype 패턴은 clone 프로세스를 clone 중인 실제 객체로 위임한다.