Prototype pattern은 소프트웨어 디자인 패턴 용어로, 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며, 인스턴스는 새 객체를 만들기 위해 자신을 복제하게 된다.
Prototype pattern은 추상 팩토리 패턴과는 반대로, 클라이언트 응용 프로그램 코드 내에서 객체 창조자를 서브 클래스 하는 것을 피할 수 있게 해준다.
프로토타입 패턴은 새로운 객체는 일반적인 방법(예를 들어, new를 사용해서라든지)으로 객체를 생성하는 고유의 비용이 주어진 응용 프로그램 상황에 있어서 불가피하게 매우 클 때, 이 비용을 감내하지 않을 수 있게 해준다. -위키백과
import Foundation
protocol Prototype: AnyObject {
func clone() -> Self
}
class Dog: Prototype {
var age: Int
init(age: Int) {
self.age = age
}
func clone() -> Self {
return Dog(age: self.age) as! Self
}
}
let testDog = Dog(age: 1)
testDog.age += 2
let test2Dog = testDog.clone()
testDog.age += 3
print(test2Dog.age)
print(testDog.age)
// 3
// 6
NSCopying
프로토콜을 사용한 예제 class Prototype: NSCopying {
var number: Int
init(number: Int) {
self.number = number
}
func copy(with zone: NSZone? = nil) -> Any {
let copy = Prototype(number: number)
return copy
}
}
// 사용 예
let prototype = Prototype(number: 1)
if let copy = prototype.copy() as? Prototype {
print(copy.number) // 출력: 1
}
제가 학습한 내용을 요약하여 정리한 것입니다. 내용에 오류가 있을 수 있으며, 어떠한 피드백도 감사히 받겠습니다.
감사합니다.