팩토리 메서드(Factory Method) 디자인 패턴

팩토리 메서드(Factory Method) 디자인 패턴은 객체 생성을 하위 클래스에게 위임하여 다양한 객체 유형을 생성할 수 있는 유연성을 제공합니다. Swift로 작성된 간단한 예제를 살펴보겠습니다:

protocol Animal {
    func speak()
}

class Dog: Animal {
    func speak() {
        print("Woof!")
    }
}

class Cat: Animal {
    func speak() {
        print("Meow!")
    }
}

// AnimalCreator는 Animal 타입의 객체를 생성하는 팩토리 클래스입니다.
class AnimalCreator {
    func createAnimal() -> Animal {
        fatalError("This method should be overridden")
    }
}

class DogCreator: AnimalCreator {
    override func createAnimal() -> Animal {
        return Dog()
    }
}

class CatCreator: AnimalCreator {
    override func createAnimal() -> Animal {
        return Cat()
    }
}

// 사용 예시
let dogCreator = DogCreator()
let dog = dogCreator.createAnimal()
dog.speak() // 출력: Woof!

let catCreator = CatCreator()
let cat = catCreator.createAnimal()
cat.speak() // 출력: Meow!

위 예제에서 Animal 프로토콜은 동물이 말하는 기능을 정의하고, Dog과 Cat 클래스는 이 프로토콜을 구현합니다. AnimalCreator 클래스는 동물 객체를 생성하는 팩토리 메서드인 createAnimal()을 정의합니다. 이 메서드는 기본 클래스에서 구현되지 않았으며, 하위 클래스에서 오버라이드해야 합니다.

DogCreator와 CatCreator 클래스는 AnimalCreator를 상속받아 createAnimal() 메서드를 오버라이드하고, 각각 Dog와 Cat 객체를 생성해 반환합니다.

마지막으로 사용 예시에서는 DogCreator와 CatCreator 인스턴스를 생성하고, 각각의 createAnimal() 메서드를 호출하여 동물 객체를 생성합니다. 생성된 동물 객체의 speak() 메서드를 호출하면 적절한 음성 출력이 표시됩니다.

이 예제는 팩토리 메서드 디자인 패턴을 사용하여 다양한 유형의 동물 객체를 생성하는 방법을 보여줍니다. 이 패턴은 객체 생성 로직을 캡슐화하여 코드의 유연성과 확장성을 향상시키는 데 도움이 됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다