[swift] 팩토리 메소드 패턴

팩토리 메소드 패턴을 사용하는 가장 간단한 방법은 프로토콜을 정의하고, 이 프로토콜을 채택하는 여러 서브 클래스가 자신만의 제품을 생성하도록 하는 것입니다. 이 때, 팩토리 메소드 패턴을 구현할 때는 각각의 제품을 생성하는 메소드를 프로토콜 내에 선언하여야 합니다.

이러한 방식으로 클라이언트 코드에서는 어떤 서브 클래스가 생성될지 몰라도 되며, 단순히 팩토리 메소드를 호출하는 것으로 새로운 객체를 생성할 수 있습니다.

이를 통해 유지보수성이 향상되고, 코드의 재사용이 증가하며, 객체 생성 코드의 가독성과 유지보수성이 향상됩니다.

protocol Product {
    func performAction()
}

class ConcreteProduct1: Product {
    func performAction() {
        print("Performing action for ConcreteProduct1")
    }
}

class ConcreteProduct2: Product {
    func performAction() {
        print("Performing action for ConcreteProduct2")
    }
}

protocol Creator {
    func factoryMethod() -> Product
}

class ConcreteCreator1: Creator {
    func factoryMethod() -> Product {
        return ConcreteProduct1()
    }
}

class ConcreteCreator2: Creator {
    func factoryMethod() -> Product {
        return ConcreteProduct2()
    }
}

let creator1: Creator = ConcreteCreator1()
let product1 = creator1.factoryMethod()
product1.performAction()

let creator2: Creator = ConcreteCreator2()
let product2 = creator2.factoryMethod()
product2.performAction()