ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [디자인 패턴] 팩토리 패턴 (factory pattern)
    Computer Science/Design Pattern 2022. 12. 13. 00:09
    반응형

    팩토리패턴이란?

    : 객체 생성 처리를 하위 클래스로 분리해 처리하도록 캡슐화하는 패턴
    - 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화
    - 상속 관계에 있는 두 클래스에서 상위클래스는 중요한 뼈대를 결정하고 하위클래스는 객체 생성에 관한 구체적인 내용을 결정
    - 상위 클래스에서는 인스턴스 생성 방식에 대해 관여하지 않기 때문에 더 많은 유연성을 가짐
    - 객체 생성로직이 따로 있기 때문에 코드 리팩토링에 있어서 편의성 증가

    [ 구현 방법 ]

    abstract class Coffee {
      public abstract int getPrice();
      
      @Override
      public String toString() {
        return "This coffee is " + this.getPrice();
      }
    }
    
    class CoffeeFactory {
      public static Coffee getCoffee(String type, int price) {
        if("Latte".equalsIgnoreCase(type)) return new Latee(price);
        else if("Americano".equalsIgnoreCase(type)) return new Americano(price);
        else { return new BlackCoffee(); }
      }
    }
    
    Class BlackCoffee extends Coffee {
      private int price;
      
      public BlackCoffee() {
        this.price = -1;
      }
      
      @Override
      public int getPrice() {
        return this.price;
      }
    }
    
    Class Latte extends Coffee {
      private int price;
      
      public Latte(int price) {
        this.price = price;
      }
      
      @Override
      public int getPrice() {
        return this.price;
      }
    }
    
    Class Americano extends Coffee {
      private int price;
      
      public Americano(int price) {
        this.price = price;
      }
      
      @Override
      public int getPrice() {
        return this.price;
      }
    }
    
    public class Test {
      public static void main(String[] args) {
        Coffee latte = CoffeFactory.getCoffee("Latte", 4000);
        System.out.println("Factory Lattee :: " + latte);
      }
    }
    
    /*
    * Facotry Latte :: This coffee is 4000
    */

    [ 장점 ]

    1. 제품 클래스 계통을 수정하지 않고 쉽게 적용 가능

    2. 클래스를 통해 생성한 객체를 반환 받아 사용하기 때문에 코드 관리 효율성 증가 및 결합도를 낮춰 유지 보수 용이

    [ 단점 ]

    1. 제품이 추가 될때마다 팩토리 클래스도 추가되어야 하여 클래스의 수가 많아지게 됨

    반응형

    댓글

Designed by Tistory.