2023.07.31

팩토리 패턴

팩토리 패턴이란, 객체 생성을 서브 클래스로 위임해서 캡슐화하는 패턴이다. 객체를 생성하는 인터페이스는 정의되어 있지만, 실제로 생성은 서브 클래스에서 이루어지는 것으로 여러 서브 클래스를 가지는 슈퍼 클래스에 들어오는 인자를 통해서 인스턴스를 반환해준다.


구현

우선 인터페이스와 여러 서브 클래스가 아래와 같이 있다고 가정하자.

public interface Fruit {
	void juice();
}

public class Apple implements Fruit {
	@Override
	public void juice() {
		System.out.println("apple juice!");
	}
}

public class Banana implements Fruit {
	@Override
	public void juice() {
		System.out.println("banana juice!");
	}
}

위와 같이 있는 상태에서… 아래와 같이 팩토리 클래스를 작성한다. fruitType을 통해서 어떤 타입의 객체를 만들지 결정되면 해당 객체를 팩토리에서 리턴해준다.

public class FruitFactory {
	public Fruit makeJuice(String fruitType) {
		if(fruitType.equals("apple")) {
			return new Apple();
		}
		else if (fruitType.equals("banana")) {
			return new Banana();
		}
		return null;
	}
}


장점 및 단점

팩토리 패턴은 서브클래스의 인스턴스화를 제거하기 때문에 결합도를 느슨하게 둘 수 있고, 확장이 쉽다. 하지만, 간단한 객체를 만들려고 할때에도 팩토리 클래스에 추가해야하기 때문에 그에 따른 코드가 늘어난는 단점이 있다.


추상 팩토리와의 관계

여기에서 if-else 구문으로 구분해서 리턴하는데, 이를 더 추상화 한 것이 추상 팩토리이다. 추상 팩토리에서는 if-else 코드 없이 생성할 수 있게 추가한다. 또한 기존 팩토리보다. 독립적으로 유연하게 변경할 수 있다는 장점이 있는데 이는 추상 팩토리 패턴에서 깊이 있게 설명하겠다.



Leave a comment