HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📖
공부한 책
/헤드 퍼스트 디자인 패턴/
4. 팩토리 패턴

4. 팩토리 패턴

상황Simple Factory (간단한 팩토리)Factory MethodSimple Factory와 Factory Method 패턴의 차이팩토리의 장점추상 팩토리

상황

애플리케이션에서 구상 클래스의 인스턴스 생성 부분을 전부 찾아내서 애플리케이션의 나머지 부분으로부터 분리(캡슐화) 하기 위해 팩토리 패턴을 사용함
Pizza orderPizza(String type) { Pizza pizza; /* 변하는 부분 */ if (type.equals("cheese")) { pizza = new CheesePizza(); } else if (type.equals("pepproni")) { pizza = new PepperoniPizza(); } 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 instance를 만드는 부분을 다른 객체에게 위임함. 그럼으로써 캡슐화를 진행

Simple Factory (간단한 팩토리)

  • 간단한 팩토리(Simple Factory)는 디자인 패턴이라기 보다는 프로그래밍에서 자주 쓰이는 관용구에 가까움

Factory Method

💡
팩토리 메서드 패턴 에서는 객체를 생성할 때 필요한 인터페이스를 만듭니다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정합니다. 팩토리 메서드 패턴을 사용하면 클래스 인스턴스 만드는 일을 서브클래스 에게 맡기게 됩니다.
  • 모든 팩토리 패턴은 객체 생성을 캡슐화 함
  • 팩토리 메소드 패턴은 서브클래스에서 어떤 클래스를 만들지 결정함으로써 객체 생성을 캡슐화함
 

Simple Factory와 Factory Method 패턴의 차이

  • 팩토리 메서드 패턴은 간단한 팩토리와 상당히 비슷함
  • 하지만 Simple Factory는 일회용 처방에 불과한 반면, 팩토리 메서드 패턴을 사용하면 여러 번 재사용이 가능한 프레임워크를 만들 수 있음
    • 예로, 팩토리 메서드 패턴의 orderPizza() 메서드는 피자를 만드는 일반적인 프레임워크를 제공함
    • 그 프레임워크는 팩토리 메서드 피자 생성 구상 클래스(NYPizzaStore, ChicagoPizzaStore)를 만듦
  • 둘을 비교해보면 간단한 팩토리는 객체 생성을 캡슐화하는 방법을 사용하긴 하지만 팩토리 메서드만큼 유연하지는 않음. 생성하는 제품을 마음대로 변경할 수 없기 때문에.

팩토리의 장점

  • 객체 생성 코드를 전부 한 객체 또는 메서드에 넣으면 코드에서 중복되는 내용을 제거할 수 있고, 나중에 관리할 때도 한 군데에만 신경을 쓰면 됨
  • 그리고 객체 인스턴스를 만들 때 인터페이스만 있으면 됨

추상 팩토리