블로그 이미지

3DMP engines

3D그래픽스 물리 수학, 프로그래밍 GPU Shader 게임엔진 알고리즘 디자인패턴 matlab etc..






프로토타입 패턴

Prototype(원형)

 

한번복사되어 가져온 객체 A 가 있다고 가정

A 에는 A.a[10], A.b[10] , A.c[10]

 

각 변수가 있고 각 변수는 어떤 데이터들을 또 담을 수 있는 클래스라고 할때

 

이 클래스로 다양한 표현을 할 수 있는데 각 다양한 표현을 하기 위해서 객체복사는

 

한번만 이루어지고 복사되어진 것들을 복사된 것으로 계속 활용 한다는 패턴

 

 

그냥 일반적인 개념이다

 

서버 & 클라이언트에서는 부하를 줄이기 위한 필수적 개념

 


 

 

자신 복사 구문은 이렇게 처리한다

 

Clone() : 자신 복사

 

class A{
 int test;
public:
 A* Clone(){ return new A(*this); }
};

 

이런 Prototype 패턴의 이점중 하나는

 

 

1. but Abstract 패턴을 쓰지 않고 그냥 자기 자신만 복사할때 Clone() 사용

 

 

2.

만약 파서에서 이미 오브젝트 아이디로 구분되어져 있는 오브젝트들을 램으로 복사하기 우해 로드 할때

  

각 오브젝트들에 대한 타입을 분기문으로 구분해서 복사 차리 하지 않고

 

한줄로 처리가 가능한데 이땐 Abstract 패턴의 구조로(virtual) 오브젝트가 만들어지고

 

각 자식 클래스에서 Clone() 을 부르면 분기문 없이 바로 복사 처리 가능

 

이때 복사되는 전체 노드를 Composite 패턴과 연결하면 효과적

 

이때 Composite 패턴은 기존에 등록된 노드(객체) 들의 결ㅇ합 집합으로 이 자체를 복사하고자 할때

 

또는 Composite 와 Composite 끼리 묶어 다시 Composite 을 구성할때 유용

 

 

 


 

 

 

전체 복사 composite 도  Clone() 을 수행할때 위 처럼 유사하게 수행한다

 

 

 


신경써야 할 부분

 

Clone() 복사시 자기 자신의 Deep Copy 가 필요한가 살펴봐야함

 

노드들이 포인터 일경우 포인터를 잃어버리지 않도록 주의

 

 

- 순환 구조일경우 구현이 까다롭다( because of 서로서로 복사  )

저작자 표시 비영리 동일 조건 변경 허락
신고

+ Recent posts