본문 바로가기

카테고리 없음

생성패턴

 

1. 팩토리 메서드(Factory Method) 패턴

팩토리 메서드 패턴은 객체 생성을 위한 인퍼테이스를 정의하고, 실제 생성 작업은 서브클래스에서 수행하도록 하는 패턴입니다. 이 패턴을 사용하면 코드에서 구체적인 클래스의 인스턴스를 직접 생성하지 않고, 팩토리 메서드를 통해 생성하므로 객체 생성 로직을 캡슐화하고 코드의 유연성을 높일 수 있습니다.

 

즉, 클라이언트에서 직접 new 연산자를 통해 제품 객체를 생성하는 것이 아닌, 제품 객체들을 도맡아 생성하는 공장 클래스를 만들고, 이를 상속하는 서브 공장 클래스의 메서드에서 여러가지 제품 객체 생성을 각각 책임 지는 것이다. 또한 객체 생성에 필요한 과정을 템플릿 처럼 미리 구성해놓고, 객체 생성에 관한 전처리나 후처를 통해 생성 과정을 다양하게 처리하여 객체를 유연하게 정할 수 있는 특징도 있다.

 

활용성

- 어떤 클래스가 자신이 생성해야 하는 객체의 클래스를 예측할 수 없을때

- 생성할  객체를 기술하는 책임을 자신의 서브클래스가 지정했으면 할 때

 

// 부모 클래스: AnimalFactory
abstract class AnimalFactory {
    abstract Animal createAnimal();
}

// 자식 클래스: DogFactory, CatFactory
class DogFactory extends AnimalFactory {
    Animal createAnimal() {
        return new Dog();
    }
}

class CatFactory extends AnimalFactory {
    Animal createAnimal() {
        return new Cat();
    }
}

// Animal 인터페이스와 구체적인 구현체 Dog, Cat
interface Animal {
    void makeSound();
}

class Dog implements Animal {
    public void makeSound() {
        System.out.println("Woof!");
    }
}

class Cat implements Animal {
    public void makeSound() {
        System.out.println("Meow!");
    }
}

// 사용 예
public class Main {
    public static void main(String[] args) {
        AnimalFactory factory = new DogFactory();
        Animal animal = factory.createAnimal();
        animal.makeSound(); // Output: Woof!

        factory = new CatFactory();
        animal = factory.createAnimal();
        animal.makeSound(); // Output: Meow!
    }
}

 

팩토리 패턴의 장점

- 팩토리 패턴은 클라이언트 코드로부터 서브 클래스의 인스턴스화를 제거하여 서로 간의 종속성을 낮추고, 결합도를 느슨하게 하며(Loosely Coupled), 확장을 쉽게 한다.

- 팩토리 패턴은 클라이언트와 구현 객체들 사이에 추상화를 제공한다.

 

팩토리 패턴의 단점

- 새로 생성할 객체가 늘어날 때마다, Factory 클래스에 추가해야 되기 때문에 클래스가 많아짐