cs 전공지식 #34 팩토리 패턴

2023. 2. 22. 18:09cs일지

2023/02/22

  • 학습내용

 

1.1 디자인 패턴

 

1) 팩토리 패턴(Factory Pattern)

 

느슨한 결합을 이용하는 객체지향 디자인

불필요한 의존성을 없애는 방법

 

팩토리 패턴은 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자

상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고,

하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다.

 

팩토리 패턴 장점

1) 유연성(느슨한 결합)

상위 클래스와 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며 

상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에 유연성을 갖게 된다.

 

2) 유지 보수성

객체 생성 로직이 따로 떼어져 있기 때문에 코드를 리펙터링하더라도 한 곳만 수정하는 것이 가능해 유지 보수에 용이하다.

 

ex) 상위 클래스인 바리스타 공장이 있다.

하위 클래스는 라떼, 아메리카노, 우유 레시피가 있다.

각각 레시피들은 구체적인 내용이 들어 있고 바리스타 공장에서 내용을 토대로 라떼, 아메리카노, 우유를 생산하는 것이다.

 

 

JAVA 팩토리 패턴 구현

// JAVA 팩토리 패턴

abstract class Coffee { 
    public abstract int getPrice(); 
    
    @Override
    public String toString() {
        return "Hi this coffee is " + this.getPrice();
    }
}
class CoffeeFactory { 
    public static Coffee getCoffee(String type, int price) {
        if ("Latte".equalsIgnoreCase(type)) return new Latte(price);
        else if ("Americano".equalsIgnoreCase(type)) return new Americano(price);
        else {
            return new DefaultCoffee();
        } 
    }
}
class DefaultCoffee extends Coffee {
    private int price;

    public DefaultCoffee() {
        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 HelloWorld { 
     public static void main(String[] args) { 
        Coffee latte = CoffeeFactory.getCoffee("Latte", 4000);
        Coffee ame = CoffeeFactory.getCoffee("Americano", 3000); 
        System.out.println("Factory latte ::" + latte);
        System.out.println("Factory ame ::" + ame); 
     }
} 
/*
Factory latte ::Hi this coffee is 4000
Factory ame ::Hi this coffee is 3000
*/

 

 

 

참고자료

 -면접을 위한 CS 전공지식 노트