[swift] 추상 팩토리 패턴

개요

추상 팩토리 패턴은 객체 생성을 추상화하여 클라이언트가 인터페이스를 통해 연관된 객체들을 생성할 수 있게 하는 디자인 패턴입니다. 이 패턴은 클라이언트에서 구체적인 클래스를 명시적으로 지정하지 않고 객체를 생성할 수 있게 해줍니다.

예제 코드

protocol AbstractProductA {
    func operationA()
}

protocol AbstractProductB {
    func operationB()
}

protocol AbstractFactory {
    func createProductA() -> AbstractProductA
    func createProductB() -> AbstractProductB
}

class ConcreteProductA1: AbstractProductA {
    func operationA() {
        // 구체적인 동작 구현
    }
}

class ConcreteProductB1: AbstractProductB {
    func operationB() {
        // 구체적인 동작 구현
    }
}

class ConcreteProductA2: AbstractProductA {
    func operationA() {
        // 구체적인 동작 구현
    }
}

class ConcreteProductB2: AbstractProductB {
    func operationB() {
        // 구체적인 동작 구현
    }
}

class ConcreteFactory1: AbstractFactory {
    func createProductA() -> AbstractProductA {
        return ConcreteProductA1()
    }
    
    func createProductB() -> AbstractProductB {
        return ConcreteProductB1()
    }
}

class ConcreteFactory2: AbstractFactory {
    func createProductA() -> AbstractProductA {
        return ConcreteProductA2()
    }
    
    func createProductB() -> AbstractProductB {
        return ConcreteProductB2()
    }
}

사용 예시

위 예제 코드에서 AbstractProductA, AbstractProductB, AbstractFactory는 추상 팩토리 패턴의 핵심 요소를 나타냅니다. 실제로 사용할 때는 클라이언트가 구체적인 팩토리를 선택하여 해당 팩토리를 통해 객체를 생성합니다.

let factory1: AbstractFactory = ConcreteFactory1()
let productA1 = factory1.createProductA()
let productB1 = factory1.createProductB()

let factory2: AbstractFactory = ConcreteFactory2()
let productA2 = factory2.createProductA()
let productB2 = factory2.createProductB()

결론

추상 팩토리 패턴은 객체 생성을 추상화하여 유연성을 확보하고, 클라이언트 코드와 구체적인 클래스들 간의 결합도를 낮추는데 활용됩니다. 오랜 시간 동안 안정적으로 사용되어 온 디자인 패턴 중 하나입니다.

참고: The Swift Programming Language: Protocols