개발/디자인패턴

[Design Pattern] Factory 패턴

도넛의용기 2023. 5. 25. 11:42

Factory 패턴은 객체 생성을 캡슐화하는 디자인 패턴입니다. 이 패턴은 객체 생성 로직을 클라이언트 코드에서 분리하여, 요청에 따라 다양한 객체를 생성할 수 있게 합니다. Factory 패턴은 주로 다음과 같은 상황에서 사용됩니다:

  1. 생성할 객체의 타입이 런타임에 결정되는 경우
  2. 객체 생성과 관련된 로직을 한 곳에서 관리하고 싶은 경우
  3. 객체 생성에 필요한 데이터가 복잡한 경우

코틀린에서 Factory 패턴을 구현하는 예제를 들어보겠습니다.

먼저, 생성할 객체의 공통 인터페이스를 정의합니다.

interface Animal { fun speak() }

다음으로, 인터페이스를 구현하는 여러 클래스를 정의합니다.

class Dog : Animal {
    override fun speak() {
        println("Woof! Woof!")
    }
}

class Cat : Animal {
    override fun speak() {
        println("Meow! Meow!")
    }
}

이제 Factory 클래스를 정의합니다. 이 클래스는 객체 생성 로직을 캡슐화하며, 클라이언트 코드에 의해 호출됩니다.

class AnimalFactory {
    fun createAnimal(type: String): Animal? {
        return when (type.toLowerCase()) {
            "dog" -> Dog()
            "cat" -> Cat()
            else -> null
        }
    }
}

마지막으로 클라이언트 코드에서 Factory 클래스를 사용하여 객체를 생성합니다.

fun main() {
    val animalFactory = AnimalFactory()

    val dog = animalFactory.createAnimal("dog")
    dog?.speak()

    val cat = animalFactory.createAnimal("cat")
    cat?.speak()
}

위 예제에서 AnimalFactory 클래스는 createAnimal 함수를 통해 요청된 동물 타입에 따라 Dog 또는 Cat 객체를 생성합니다. 클라이언트 코드는 이 Factory 클래스를 사용하여 필요한 객체를 쉽게 생성할 수 있습니다. 이렇게 함으로써 객체 생성 로직이 클라이언트 코드와 분리되어 유지보수와 확장성이 향상됩니다.

'개발 > 디자인패턴' 카테고리의 다른 글

[Design Pattern] View Model of MVVM  (1) 2023.07.27
[Design Pattern] Builder 패턴  (6) 2023.05.25
[Design Pattern] Adapter 패턴  (0) 2023.05.25
[Design Pattern] MVVM 아키텍처 패턴  (1) 2023.05.22