팩토리 메소드 패턴 (Factory Method Pattern)

seunghyun lee·2022년 7월 18일
0

Computer Science

목록 보기
6/19
post-thumbnail

팩토리 메소드 패턴(Factory Method Pattern)

객체를 생성하는 인터페이스는 미리 정의하되, 인스턴스를 만들 클래스의 결정은 서브 클래스쪽에서 내리는 패턴이다.
즉, 여러 개의 서브 클래스를 가진 슈퍼 클래스가 있을때, 인풋에 따라 하나의 자식 클래스의 인스턴스를 리턴해주는 방식.
객체 생성과 클래스 구현을 나눠 상호 의존도를 줄인다.
생성 패턴 중 하나다.
생성 패턴: 인스턴스를 만드는 절차를 추상화하는 패턴

사용시기

  • 어떤 클래스가 자신이 생성해야 하는 객체의 클래스를 예측할 수 없을 때
  • 생성할 객체를 기술하는 책임을 자신의 서브 클래스가 지정했으면 할 때

장점

  • 생성할 클래스를 미리 알지 못해도 팩토리 클래스가 객체 생성을 담당한다.
  • 객체의 자료형이 하위 클래스에 의해 결정된다. -> 확장 용이성
  • 동일한 형태로 프로그래밍 가능
  • 클라이언트와 구현 객체들 사이에 추상화를 제공한다.

단점

  • 객체가 늘어날 때마다 하위 클래스 재 정의로 인한 불필요한 많은 클래스 생성 가능성 존재

코드 구현

class Animal {
    void speak(){}
}

class Dog extends Animal{
    void speak(){
        System.out.println("멍멍");
    }
}
class Cat extends Animal{
    void speak(){
        System.out.println("야옹");
    }
}

class AnimalFactory{
    public Animal getAnimal(String animalType) {
        if(animalType.equalsIgnoreCase("CAT")) {
            return new Cat();
        } else if(animalType.equalsIgnoreCase("DOG")) {
            return new Dog();
        }
        return null;
    }
}

public class Main {
    public static void main(String[] args) {
        AnimalFactory animalFactory = new AnimalFactory();
        Animal animal1 = animalFactory.getAnimal("CAT");
        Animal animal2 = animalFactory.getAnimal("DOG");
        animal1.speak();    // 야옹
        animal2.speak();    // 멍멍
    }
}

추가

  • 팩토리 메소드 패턴을 사용하게 된다면 인스턴스를 필요로 하는 Applicatoin에서 computer의 서브 클래스에 대한 정보는 모른 채 인스턴스를 생성할 수 있게 된다.
  • 후에 더 많은 서브 클래스가 추가된 다고 할 지라도, Applicatoin의 코드는 수정할 필요가 없게 된다.

추상 팩토리 패턴(Abstract Factory Pattern)

서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이를 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성한다.

추상 팩토리 패턴 vs 팩토리 메소드 패턴

  • 차이점

    추상 팩토리 패턴에서는 팩토리 클래스에서 서브 클래스를 생성하는데에 있어 if-else문을 걷어낸다.
    인풋으로 서브 클래스에 대한 식별 데이터를 받는 것이 아닌 또 하나의 팩토리 클래스를 받는다.

0개의 댓글