설계 패턴 : 팩토리 패턴

박철민·2023년 4월 6일
0

CS 지식

목록 보기
6/8

팩토리 패턴

팩토리 패턴이란?

팩토리 패턴(factory pattern)은 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴입니다. - '면접을 위한 CS 전공지식 노트

상위 클래스는 오로지 뼈대만! 생성과 같은 구체적인 것은 하위 클래스만!

'커피 팩토리'라는 상위 클래스로 뼈대를 만들었습니다. 이제 타입과 price를 받아서 하위 클래스를 호출하여 결정합니다. '라떼'와 '아메리카노'가 상속받아 실제 구현(가격 지정)을 상세하게 적었습니다.

package Chapter1.No1_DesignPattern.factory;

// 상위 클래스를 추상화로 선언
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();
		}
	}
}
// Coffee를 상속받는다.
class DefaultCoffee extends Coffee {
	private int price;
	
	// 실제 구현 부분을 명시하였다.
	public DefaultCoffee() {
		this.price = -1;
	}

	@Override
	public int getPrice() {
		return this.price;
	}
}
//Coffee를 상속받는다.
class Latte extends Coffee {
	private int price;

	// 실제 구현 부분을 명시하였다.
	public Latte(int price) {
		this.price = price;
	}
	@Override
	public int getPrice() {
		return this.price;
	}
}
//Coffee를 상속받는다.
class Americano extends Coffee {
	private int price;

	// 실제 구현 부분을 명시하였다.
	public Americano(int price) {
		this.price = price;
	}

	@Override
	public int getPrice() {
		return this.price;
	}
}
public class FactoryCoffee {
	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);
	}
}

중요한 것은 상위클래스가 중요한 뼈대를 결정, 하위 클랫에서 객체 생성에 관한 구체적인 내용을 결정한다.

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

ENUM을 이용한 팩토리 패턴!

https://inpa.tistory.com/entry/GOF-%F0%9F%92%A0-Enum-Factory-Method-%EB%B3%80%ED%98%95-%ED%8C%A8%ED%84%B4 를 참고하세요.

Enum Factory Method 변형 패턴은 GOF의 Factory Method 패턴의 단점을 보완하기 위한 패턴입니다.
Factory Methothod 패턴의 가장 큰 단점은 제품 객체의 갯수마다 공장 서브 클래스를 모두 구현해야 된다는 점입니다. 즉, 제품 객체가 50개면 공장 객체도 50개를 구현해야 된다는 말입니다.

profile
멘땅에 헤딩하는 사람

0개의 댓글