프로토타입 패턴이란?
프로토타입 패턴은 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 합니다.
인스턴스는 새 객체를 만들기 위해 자신을 복제합니다.
즉 프로토타입 패턴은 코드를 다른 클래스에 의존하지 않고 기존 객체들을 복사할 수 있도록 하는 생성 디자인 패턴입니다.
프로토타입 패턴 쉽게 이해하기
음....(쉽게 생각하기가 제일 어려운 것 같다)
예를 들어서 원시인들이 있다고 생각해 보자 그런데 어느 날 하늘에서 핸드폰이 떨어졌다고 생각해 봅시다.
원시인들은 핸드폰에 든 손전등 그리고 유튜브 등등을 보고 핸드폰에 욕심이 났다고 하자! 한 원시인이 자기가 핸드폰을 만들겠다고 해서 정말 똑같은 외형으로 핸드폰을 만들어왔다고 치자 하지만 그것들은 그들이 원하는 손전등 또는 유튜브를 실행할 수 없습니다.
다시 코드로 제가 예시를 들은 것을 풀어보겠습니다.
클래스를 만들다 보면 프라이빗 변수 또는 함수를 공개하고 싶지 않은 경우는 접근 제어자를 사용해서 막습니다. 그 뜻은 아무리 원하는 객체를 가져와도 비공개여서 객체의 내부를 똑같이 받아오지 못한다는 뜻입니다. 그리고 설령 코드를 받아왔다고 해도 클래스의 의존성이 올라갑니다. 예를 들어서 메서드의 매개변수가 일부 인터페이스를 따르는 모든 객체를 수락할 때 인스턴스만 알고 구성 클래스의 내부는 알지 못할 가능성이 큽니다. 이러한 경우 프로토타입 패턴을 사용하면 실제로 복제되는 객체들을 복제 프로세스로 위임하게 됩니다.
패턴은 복제를 지원하는 모든 객체에 대한 공통 인터페이스를 선언합니다. 그러면 인터페이스를 사용할 경우에는 클래스와 결합하지 않을 수 있기 때문에 의존성이 낮아집니다. 우리는 이 인터페이스를 clone 메서드에 포함시킵니다. 그리고 clone 메서드는 일반 클래스처럼 사용하면 됩니다. 프로토 타입을 사용하면 객체들이 같은 클래스에 속한 다른 객체의 비공개 필드에도 접근할 수 있고 비공개 필드를 복하는 것도 가능합니다.
그리고 저희는 복제된 객체를 프로토타입이라고 부르기로 했습니다.
프로토타입 패턴은 주로 어떤 경우에 사용할까?
주로 프로토타입 패턴은 제품의 대량 생산을 시작하기 전에 다양한 테스트를 수행하기 위해 사용됩니다. 하지만 프로토타입 자체는
생산 과정에 참여하지 않고 수동적인 역할을 합니다. 때문에 프로토타입 패턴의 별명이 (유사 분열)입니다. 이유는 하나의 프로토 타입이 자페에서는 과정에 참여하지 않고 자신을 복사하여서 원본 프로토타입처럼 행동하기 때문입니다.
프로토타입 패턴 구조 이해하기!
Prototype(clone()) <- Concrete Prototype
원래 코드 구조를 패턴화 하기 위해서는 interface를 정의합니다. 하지만 interface를 굳이 사용하지 않고 자신을 반환하는 방법을 사용하는 경우가 대부분입니다.
프로토타입 패턴 예제 코드
https://github.com/jjunhaa0211/ADPattern-Swift/tree/main/GoF-PrototypePattern
GitHub - jjunhaa0211/ADPattern-Swift: 🧪 Swift를 사용하여 아키텍쳐 패턴과 디자인 패턴의 예제를 설명합
🧪 Swift를 사용하여 아키텍쳐 패턴과 디자인 패턴의 예제를 설명합니다. 🧪. Contribute to jjunhaa0211/ADPattern-Swift development by creating an account on GitHub.
github.com
드디어 2번째 글을 작성하게 됐습니다. 오늘도 긴 글 읽어주셔서 감사힙니다!!!
'Swift > 패턴' 카테고리의 다른 글
[생성 패턴] Abstract Factory Method Pattern (0) | 2023.02.28 |
---|---|
[생성 패턴]Factory Method Pattern (0) | 2023.02.28 |
[생성 패턴] Builder Pattern (0) | 2023.02.27 |
[디자인 패턴] Gof 디자인 패턴 (0) | 2023.02.27 |
[디자인 패턴] 델리게이트 패턴 (1) | 2023.02.24 |