리셋 되지 말자

팩토리 메서드 패턴(Factory Method Pattern) 본문

Java(폐지)/디자인 패턴

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

kyeongjun-dev 2020. 8. 5. 12:27

팩토리 메서드 패턴


팩토리 메서드는 객체를 생성 반환하는 메서드를 말한다. 여기에 패턴이 붙으면, '하위 클래스에서 팩토리 메서드를 오버라이딩하여 객체를 반환하게 하는 것'을 의미한다.

예시 코드

  • Coffee.java
package factoryMethodPattern;

public abstract class Coffee {
    public abstract String getName();
}
  • Americano.java
package factoryMethodPattern;

public class Americano extends Coffee{
    public String getName() {
        return "Americano";
    }
}
  • Moka.java
package factoryMethodPattern;

public class Moka extends Coffee{
    public String getName() {
        return "Moka";
    }
}
  • CoffeeFactory.java
package factoryMethodPattern;

public abstract class CoffeeFactory {
    public abstract Coffee createCoffee(String name);

    public void boilCoffee() {
        System.out.println("Boiling Coffee...");
    }
}
  • MakeCoffeeFactory.java
package factoryMethodPattern;

public class MakeCoffeeFactory extends CoffeeFactory{
    @Override
    public Coffee createCoffee(String name) {
        if(name=="아메리카노")
            return new Americano();
        else if(name=="모카")
            return new Moka();
        else return null;
    }

}
  • CoffeeClient.java
package factoryMethodPattern;

public class CoffeeClient {
    public static void main(String[] args) {
        CoffeeFactory cf = new MakeCoffeeFactory();

        Coffee americanoCoffee = cf.createCoffee("아메리카노");
        Coffee mokaCoffee = cf.createCoffee("모카");

        cf.boilCoffee();
        System.out.println(americanoCoffee.getName());
        System.out.println(mokaCoffee.getName());
    }
}

main() 함수를 보면 팩토리 메서드를 보유한 객체를 이용하여 new 키워드 없이 이용해 커피들을 생성하고 있다.

정리


  • 오버라이딩된 메서드가 객체를 반환하는 패턴을 팩토리 메서드 패턴이라고 한다.
  • 팩토리 메서드 패턴은 의존 역전 원칙(DIP)을 활용한다. - 클라이언트가 추상 클래스에 의존하며, 추상 클래스는 콘크리트 클래스에 의존된다.
  • 클래스간의 결합도를 낮출 수 있다.
Comments