본문 바로가기
Develop/Design Pattern

팩토리 패턴이란?

by jaeyoungb 2022. 7. 27.

팩토리 패턴(Factory Pattern)

 

말 그대로, 공장과 같은 디자인 패턴이다.

 

객체를 어떻게 생성할 것인지에 대한 클래스 하나와

 

객체 생성만 하는 클래스 하나가 결합되어 동작한다.

 

예를 들면, 음식 레시피를 가진 클래스 하나와 그 레시피를 가지고 음식을 만들어내는 클래스 하나가 결합된 것이다.

 

이렇게 되면 장점은 유지보수성이 증가한다.

 

객체를 생성하는 로직이 따로 존재하기 때문에, 느슨한 결합을 가지며 이는 곧 유지보수성의 증가로 이어진다.

 

package factory; // 아이스크림 -> 기본, 딸기, 초코
                 // 기본 1000, 딸기 2000, 초코 3000

abstract class IceCream {
    public abstract int getPrice();

    @Override
    public String toString() {
        return "Hi, this ice cream is " + getPrice();
    }

}

class DefaultIceCream extends IceCream {
    private int price;

    public DefaultIceCream(int price) {
        this.price = price;
    }
    @Override
    public int getPrice() {
        return this.price;
    }
}

class StrawberryIceCream extends IceCream {
    private int price;

    public StrawberryIceCream(int price) {
        this.price = price;
    }

    @Override
    public int getPrice() {
        return this.price;
    }
}

class ChocolateIceCream extends IceCream {
    private int price;

    public ChocolateIceCream(int price) {
        this.price = price;
    }

    @Override
    public int getPrice() {
        return this.price;
    }
}

class IceCreamFactory {
    public static IceCream getIceCream(String type, int price) {
        if("Strawberry".equalsIgnoreCase(type)) {
            return new StrawberryIceCream(price);
        }
        else if("Chocolate".equalsIgnoreCase(type)) {
            return new ChocolateIceCream(price);
        }
        return new DefaultIceCream(price);
    }
}

public class FactoryTest {
    public static void main(String[] args) {
        IceCream strawberry = IceCreamFactory.getIceCream("Strawberry", 2000);
        IceCream chocolate = IceCreamFactory.getIceCream("Chocolate", 3000);

        System.out.println("Factory strawberry : " + strawberry);
        System.out.println("Factory chocolate : " + chocolate);
    }
}

 

위 코드는 아이스크림의 레시피와 아이스크림을 만들어내는 공장의 형태 코드이다.

 

맛 레시피를 위한 클래스 3개와 이를 바탕으로 만들어내는 클래스 하나가 결합해 작동되고 있다.

'Develop > Design Pattern' 카테고리의 다른 글

옵저버 패턴이란?  (0) 2022.08.17
싱글톤 패턴이란?  (0) 2022.07.26
디자인 패턴이란?  (0) 2022.07.25