[swift] Factory 디자인 패턴

Factory 디자인 패턴은 객체를 생성하기 위한 디자인 패턴으로, 객체 생성을 담당하는 별도의 클래스를 제공하여 클라이언트로 하여금 새로운 객체를 직접 생성하지 않고 팩토리 클래스에 요청함으로써 객체 생성을 캡슐화하는 방법입니다.

Factory 디자인 패턴의 구조

Factory 디자인 패턴은 Creator, ConcreteCreator, Product, ConcreteProduct 4가지 주요 구성 요소로 구성됩니다.

Factory 디자인 패턴의 장점

Factory 디자인 패턴을 사용하면 다음과 같은 장점을 얻을 수 있습니다.

예시

protocol Product {
    func operate()
}

class ConcreteProductA: Product {
    func operate() {
        print("Operating ConcreteProductA")
    }
}

class ConcreteProductB: Product {
    func operate() {
        print("Operating ConcreteProductB")
    }
}

protocol Creator {
    func createProduct() -> Product
}

class ConcreteCreatorA: Creator {
    func createProduct() -> Product {
        return ConcreteProductA()
    }
}

class ConcreteCreatorB: Creator {
    func createProduct() -> Product {
        return ConcreteProductB()
    }
}

let creatorA: Creator = ConcreteCreatorA()
let productA = creatorA.createProduct()
productA.operate()

let creatorB: Creator = ConcreteCreatorB()
let productB = creatorB.createProduct()
productB.operate()

위 예시에서는 ProductCreator 프로토콜이 정의되어 있고, ConcreteProductA, ConcreteProductB 클래스가 Product 프로토콜을 구현합니다. 마찬가지로, ConcreteCreatorA, ConcreteCreatorB 클래스가 Creator 프로토콜을 구현하여, 각각의 팩토리 메서드에서 해당하는 ConcreteProductAConcreteProductB 객체를 생성하여 반환합니다.

요약

Factory 디자인 패턴은 객체를 생성하기 위한 인터페이스를 정의하여, 서브 클래스가 어떤 클래스의 인스턴스를 생성할지를 결정하도록 하는 디자인 패턴입니다. 객체 생성과 클라이언트 코드는 분리됨으로써 코드의 응집도를 높일 수 있고, 유연성을 확보할 수 있습니다.

참고 자료