4-1. 팩토리 메서드 패턴 (Factory Method Pattern)
1. 팩토리 메서드 패턴이란?
팩토리 메서드 패턴에서는 객체를 생성하기 위한 인터체이스를 정의한다.
어떤 클래스의 인스턴스를 만들지는 어느 서브클래스에서 결정하게 만든다.
팩토리 메서드 패턴을 이요하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이다.
-> 구체적으로 어떤 것 (객체의 생성)을 만들지는 서브 클래스가 정한다.
구성요소
1) Product
- 팩토리 메서드가 생성할 객체의 인터페이스를 정의한다.
2) Creator
- 팩토리 메서드를 정의하고, 이 팩토리 메서드는 Product 타입의 객체를 리턴한다.
- 구현은 ConcreteCreator에서 하지만, 디폴트 팩토리 메서드를 구현할 수도 있다.
3) ConcreteProduct
- Product 인터페이스를 구현한다.
4) ConcreteCreator
- Creator에 정의된 팩토리 메서드를 override하여 구현한다.
기본이 되는 디자인 원칙
1) OCP
2. 동기
객체 생성을 미루고 싶을 때 사용한다.
- 클래스가 어떤 어떤 객체를 생성해야될지 모를 때
- 클래스가 자신의 서브클래스에게 세부 객체 생성 작업을 넘기고 싶을 때
장점
1) 객체 생성 부분이 분리된다.
2) 서브 클래스가 사용할 수 있는 "hook" 이 생긴다.
- Creator 클래스에 있는 팩토리 메서드 -> createProduct() 를 오버라이드 해서 커스터마이징 된 행동을 할 수 있다.
- 즉, 부모클래스의 구현을 변경하지 않고 공통적인 인터페이스를 지키면서 자신의 프로세스만 변경할 수 있는 것을 hook이라고 한다.
단점
1) 클래스가 늘어나면서 구조적 복잡도가 늘어난다.
2) 서브클래스에 대한 의존성이 생긴다.
- 만약 Product 클래스에 변경이 생기면 팩토리 메서드가 들어있는 Creator에서 또 변경이 필요할 수 있다.
3. 개인적인 포인트
1) 일하면서 많이 봐온 패턴. (BeanFactory..)