팩토리 메서드 패턴(Factory Method Pattern)은 부모 클래스에서 객체(Product)를 생성하기 위한 인터페이스를 정의하지만, 실제로 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 자식 클래스(Subclass)가 내리도록 미루는 생성 디자인 패턴입니다. 즉, 직접 new 키워드를 쓰지 않고 객체 생성을 '공장'에 위임하는 방식입니다.
이 패턴은 크게 물건을 만들어내는 공장(Creator)과 만들어진 제품(Product) 두 축으로 나뉘며, 각각 추상화(Interface/Abstract)와 구체화(Concrete) 단계로 구현됩니다.
| 장점 (Pros) | 단점 및 한계 (Cons) |
|---|---|
|
1. 완벽한 OCP 원칙 준수: 새로운 제품(예: 총, 지팡이)이 추가되어도 기존 클래스를 전혀 수정할 필요 없이, 새로운 제품 클래스와 공장 서브클래스만 추가하면 됩니다. 2. 객체 생성 로직 캡슐화: 비즈니스 로직( testWeapon)에서 직접 new Sword()를 호출하지 않아 결합도(Coupling)가 낮아집니다.
|
1. 클래스 폭발 (Class Explosion): 무기가 1개 추가될 때마다 Weapon 서브클래스 1개, Blacksmith 서브클래스 1개, 총 2개의 클래스가 계속 늘어나 파일 관리가 복잡해질 수 있습니다.2. 코드가 장황해짐: 간단한 프로그램에서는 오히려 단순 new 키워드나 '정적 팩토리 메서드(Static Factory)'를 쓰는 것이 직관적입니다.
|
자바 스프링(Spring) 프레임워크의 핵심인 IoC 컨테이너(BeanFactory, ApplicationContext)가 바로 이 팩토리 패턴 철학의 끝판왕입니다. 개발자는 '이런 객체가 필요해'라고 설정만 해두면, 컨테이너(초대형 팩토리)가 알아서 객체를 생성하고 조립하여 주입(DI)해줍니다. 실무에서는 보통 패턴의 정석적인 클래스 분리보다는 Enum이나 정적 팩토리 헬퍼 클래스를 활용하여 더 실용적으로 압축해 쓰는 경우가 많습니다.