프로토 타입 패턴이란?

원형이 되는 인스턴스로 새로운 객체 종류를 명시하고

객체를 복사하여 새로운 객체를 생성하는 패턴

구조도

structure.png

Prototype - 복제 자체에 대한 인터페이스를 선언합니다.
ConcretePrototype - 복제 자체에 대한 작업을 구현합니다.
Client - 프로토타입을 복제하도록 요청하여 새 개체를 만듭니다.

왜 사용할까? 이점은?

객체 생성시에 비용이 크게 드는 경우.

객체의 각 부분을 조합해서 생성하는 형태에도 적용이 가능하기에 비교적 간단하게 객체를 생성할 수 있다.

유의사항

프로토타입 패턴을 구현시에 복사하는 연산, clone() 메소드에 대한 구현인데

얕은 복사와 깊은 복사에 대한 문제가 있다

인스턴스 변수까지 복사하는지 변수를 공유하는지 대한 문제.

얕은 복사, 깊은 복사

얕은 복사[Shallow Copy], 깊은 복사[Deep Copy]에 대해 간단히 알아보자

얕은 복사의 경우

  • 객체를 복사시에 해당 객체만 복사하여 새 객체를 생성한다.
  • 원본의 참조값만 복사하여.
    인스턴스의 변수는 원본, 복사본 모두 같은 값을 바라보게 된다.
    • 바라보는 변수값이 변경되면 원본, 복사본 모두 변경된다.

깊은 복사의 경우

  • 객체를 복사 할 때, 해당 객체와 인스턴스 변수까지 복사하는 방식.
  • 참조는 공유하지 않는다.

참고