카테고리 없음

[디자인 패턴] 팩토리 패턴

작소율 2024. 9. 6. 12:00

1.1.2 팩토리 패턴

객체를 사용하는 코드에서 객체 생성 부분을 떠에내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴

상위 클래스와 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에 더 많은 유연성을 가지게 된다. 그리고 객체 생성 로직이 따로 떼어져 있기 때문에 코드를 리팩터링하더라도 한 곳만 고칠 수 있게 되니 유지 보수성이 증가된다. 

 

자바의 팩토리 패턴 예시)

enum CoffeeType {
	LATTE,
    ESPRESSO
}


// 추상화 클래스
abstract class Coffee {
	protected String name;
    
    public String getName() {
    	return name;
    }
 }
 
 class Latte extends Coffee {
 	public Latte() {
    	name = "latte";
    }
 }
 
 class Espresso extends Coffee {
 
 	public Espresso() {
    	name = "espresso";
    }
 }
 
 class CoffeeFactory {
 	public static Coffee createCoffee(CoffeeType type) {	
            switch(type) {
            	case LATTE:
                	return new Latte();
                case ESPRESSO:
                	return new Espresso();
                default:
                	throw new IllegalArgumentException("Invalid coffee type:" + type);        
            }
    }
 
 }
 
 
 public class main {
 	public static void main (String[] args) {
    
    	Coffee coffee = CoffeeFactory.createCoffee(CoffeeType.LATTE);
        System.out.println(coffee.getName()); // latte
    
    }
 
 
 
 }

 

CoffeeFactory 밑에 Coffee 클래스를 놓고 해당 클래스를 상속하는 Latte, Espresso 클래스를 기반으로 구현한 모습.