Search
Duplicate

프로토타입 패턴

생성일
2023/03/24 02:23
태그
디자인패턴

프로토타입 패턴

프로토타입 패턴은 객체의 생성 매커니즘을 다루는 생성패턴(Creational Pattern) 이다.
프로토타입은 ‘프로그램 등의 미완성 버전 또는 중요한 기능들이 포함되어 있는 초기 모델’ 을 의미 한다.
프로토타입 패턴(prototype pattern)은 소프트웨어 디자인 패턴 용어로, 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며, 인스턴스는 새 객체를 만들기 위해 자신을 복제(clone)하게 된다.
프로토타입 패턴은 새로운 객체를 만들 때 비용이 많이 든다면, 처음부터 객체를 생성하는 것이 아니라 원본 객체를 복사하여 수정하는 것이다.
복사해서 사용할 수 있는 비슷한 객체가 존재할 때, 해당 객체를 포로토타입으로 사용하는 것이다.

 UML Diagram

UML Diagram의 각 요소는 다음과 같다.
Prototype - 복제하려는 인터페이스를 정의하며, clone 메서드를 선언하는 추상 클래스를 만든다.
Concrete Prototype - 복제하는 연산을 구현한다.
Client - 복제를 요청하여 새로운 객체를 생성한다.

 얕은 복사와 깊은 복사

디자인 패턴은 실질적인 구현 방법에 대한 명시가 아니기에, 프로토타입의 복사 방식은 개발자의 선택이다.
프로그래밍 언어에서 요소를 복사할 때에는 일반적으로 깊은 복사얕은 복사 가 있다.
깊은 복사(Deep Copy)는 실제 값을 새로운 메모리 공간에 복사하는 것을 의미하고, 얕은 복사(Shallow Copy)는 단순히 ‘주소값’을 복사하여 같은 값을 참조하는 방식이다.
얕은 복사를 할 경우, 복사한 객체를 수정하면 원본 객체의 값도 함께 수정된다.
Prototype Pattern을 구현할 때, 원본 객체의 수정을 막으려면 깊은 복사를 사용해야한다.

 프로토타입 패턴을 사용하면 좋은 상황

1.
취급하는 오브젝트의 종류가 너무 많아 각각을 별도의 클래스로 만들어 다수의 소스 파일을 작성해야 하는 경우
2.
클래스로부터 생성하고 싶은 인스턴스가 복잡한 작업을 거쳐 만들기가 매우 어려운 경우
3.
프레임워크를 특정 클래스에 의존하지 않고 만들고 싶은 경우.
4.
클래스 이름을 지정하여 인스턴스를 만드는 것이 아니라, 이미 모형이 되는 인스턴스를 등록해 두고, 그 인스턴스를 복사하여 생성한다.

ref)