스터디/디자인패턴

[design-pattern][디자인패턴] 프로토타입 패턴(Prototype Pattern)이란?

zendyne 2022. 11. 28. 16:46

프로토타입 은 코드를 해당 클래스에 의존하지 않고 기존 개체를 복사할 수 있는 생성 디자인 패턴입니다.

 

개체가 있고 개체의 정확한 복사본을 만들고 싶다고 가정합니다. 어떻게 하시겠습니까? 먼저 동일한 클래스의 새 개체를 만들어야 합니다. 그런 다음 원래 개체의 모든 필드를 살펴보고 해당 값을 새 개체에 복사해야 합니다.

멋진! 하지만 문제가 있습니다. 개체의 필드 중 일부는 개인용이고 개체 외부에서 볼 수 없기 때문에 모든 개체를 그런 방식으로 복사할 수 있는 것은 아닙니다.

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

직접 접근 방식에는 문제가 하나 더 있습니다. 복제본을 만들려면 개체의 클래스를 알아야 하므로 코드는 해당 클래스에 종속됩니다. 추가 종속성이 두렵지 않다면 또 다른 문제가 있습니다. 예를 들어 메소드의 매개변수가 일부 인터페이스를 따르는 모든 객체를 허용하는 경우 객체가 따르는 인터페이스만 알지만 구체적인 클래스는 알지 못하는 경우가 있습니다.

해결책

프로토타입 패턴은 복제 프로세스를 복제 중인 실제 개체에 위임합니다. 패턴은 복제를 지원하는 모든 개체에 대한 공통 인터페이스를 선언합니다. 이 인터페이스를 사용하면 코드를 해당 개체의 클래스에 연결하지 않고 개체를 복제할 수 있습니다. 일반적으로 이러한 인터페이스에는 단일 clone메서드만 포함됩니다.

메서드 의 구현은 clone모든 클래스에서 매우 유사합니다. 이 메서드는 현재 클래스의 개체를 만들고 이전 개체의 모든 필드 값을 새 개체로 전달합니다. 대부분의 프로그래밍 언어에서는 개체가 동일한 클래스에 속하는 다른 개체의 개인 필드에 액세스할 수 있으므로 개인 필드를 복사할 수도 있습니다.

복제를 지원하는 객체를 프로토타입 이라고 합니다 . 개체에 수십 개의 필드와 수백 개의 가능한 구성이 있는 경우 개체를 복제하는 것이 서브클래싱의 대안이 될 수 있습니다.

미리 빌드된 프로토타입은 서브클래싱의 대안이 될 수 있습니다.

작동 방식은 다음과 같습니다. 다양한 방식으로 구성된 개체 집합을 만듭니다. 구성한 것과 같은 개체가 필요한 경우 처음부터 새 개체를 구성하는 대신 프로토타입을 복제하기만 하면 됩니다.

실세계 유추

실생활에서 프로토타입은 제품의 대량 생산을 시작하기 전에 다양한 테스트를 수행하는 데 사용됩니다. 하지만 이 경우 프로토타입은 실제 생산에 참여하지 않고 수동적인 역할만 수행합니다.

세포의 분열.

산업 프로토타입은 실제로 자신을 복제하지 않기 때문에 패턴에 훨씬 더 가까운 유추는 유사분열 세포 분열 과정입니다(생물학, 기억하십니까?). 유사 분열 후 한 쌍의 동일한 세포가 형성됩니다. 원본 셀은 프로토타입 역할을 하며 복사본을 만드는 데 적극적인 역할을 합니다.

댓글수0