반응형
* 본 포스팅은 한빛미디어의 헤드퍼스트 디자인 패턴을 공부한 내용을 정리한 글입니다.
저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니,
자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다.
* 내용이 너무 많아, 이번 팩토리 챕터는 나눠서 작성하게 되었습니다.
1. 들어가기 전에
💡
객체의 인스턴스 생성은 때론 캡슐화하여 숨겨야 할 때가 있습니다.
이를 위해 팩토리 패턴을 사용해 불필요한 의존성을 줄여 결합 문제를 해결해 봅시다.
팩토리 패턴의 필요성
- 객체의 인스턴스 생성은 무분별하게 사용할시, 사이드 이펙트가 생길 수 있다.
- 하지만 인스턴스 생성 없이 프로그램 작성은 불가능하므로, 변화에 유연하게 만들어야 한다.
- 인터페이스를 기반으로 다형성을 활용한 팩토리 패턴을 사용하면,
OCP원칙을 준수하는 유연한 코드를 작성할 수 있다.
2. 최첨단 피자의 코드를 심플 팩토리로 리팩토링
2-1.초기 코드
Pizza orderPizza(String type){
Pizza pizza;
if(type.equals("cheese")){
pizza = new CheesePizza()
} else if(type.equals("greel"){
pizza = new GreekPizza();
} else if (type.equals("pepperoni"){
pizza = new PepperopniPizza();
} else if (type.equals("clam"){
pizza = new ClamPizza();
} else if (type.equals("veggie"){
pizza new VeggiePizza();
}
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
우선 교통정리를 먼저 해야합니다.
지금까지 공통적으로 한 작업을 통해, 피자가 수정되거나 추가되는데 변화하는 코드와 변화하지 않은 코드를 분류해 보겠습니다.
조건문을 통해 Pizza의 인스턴스를 생성하는 부분은 피자의 변경, 수정, 추가에 따라 변화합니다.
하지만 하단부의 pizza 인스턴스를 통해 준비, 굽기, 자르기, 포장등의 작업은 변화하지 않습니다.
그러므로, Pizza 인스턴스의 생성부와 그 이외의 부분을 분리하겠습니다.
2-2. Pizza인스턴스 생성부의 캡슐화
public class SimplePizzaFactory{
public Pizza createPizza(String type){
Pizza pizza = null;
if(type.equals("cheese")){
pizza = new CheesePizza()
} else if(type.equals("greel"){
pizza = new GreekPizza();
} else if (type.equals("pepperoni"){
pizza = new PepperopniPizza();
} else if (type.equals("clam"){
pizza = new ClamPizza();
} else if (type.equals("veggie"){
pizza new VeggiePizza();
}
return pizza;
}
}
위에서 말했든, Pizza인스턴스 생성부를 SimplePizzaFactory라는 클래스로 캡슐화 하였습니다.
이를 Simple Factory라고 부릅니다.
💡 Simple Fatory
객체 생성을 처리하는 부분을 간단히 분리한 패턴입니다.
패턴이라고 부르지만, 사실 관용구에 가깝습니다.
2-3. 심플 팩토리를 활용한 코드 리팩토링 결과
public class PizzaStore{
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory){
this.factory = factory;
}
Pizza orderPizza(String type){
Pizza pizza;
pizza = factory.createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
2-4. 심플 팩토리를 통해 리팩토링한 구조
다음 포스팅은 팩토리 메서드 패턴으로 돌아오겠습니다.
반응형
'개발공부 > Code design' 카테고리의 다른 글
헤드퍼스트 디자인 패턴 05.싱글턴(Singleton) 패턴 (0) | 2022.11.22 |
---|---|
헤드퍼스트 디자인 패턴 04.팩토리(Factory) 패턴 - 팩토리 메서드 (0) | 2022.09.25 |
헤드퍼스트 디자인 패턴 03.데코레이터(Decorator) 패턴 (0) | 2022.08.08 |
헤드퍼스트 디자인 패턴 2장. 옵저버(Observer)패턴 (0) | 2022.07.17 |
헤드퍼스트 디자인 패턴 1장. 전략(Strategy)패턴 (1) | 2022.07.17 |