팩토리 메소드 패턴
서브 클래스에서 구체적인 오브젝트 생성 방법을 결정하게 하는 것.
- 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴
- 자식 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴
- 부모 클래스에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다
- 객체를 생성하는 메소드 != 팩토리 메소드
상속을 통해 기능을 확장하게 하는 패턴 (템플릿 메소드와 비슷)
차이점 : 팩토리 메소드 패턴은 서브클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 한다
- 슈퍼클래스 코드에서는 서브 클래스에서 구현할 메소드를 호출 -> 필요한 타입의 오브젝트를 가져와 사용(주로 인터페이스 타입으로 오브젝트를 리턴)
- 서브 클래스에서 어떤 클래스의 오브젝트를 만들어 리턴할지는 슈퍼클래스에서 알지 못한다.
- 서브클래스는 다양한 방법으로 오브젝트를 생성하는 메소드를 재정의 할 수 있다.
- 서브클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드를 팩토리 메소드라고 한다. 이 방식을 통해 오브젝트 생성 방법을 나머지 로직, 즉 슈퍼클래스의 기본 코드에서 독립시키는 방법을 팩토리 메소드 패턴이라고 한다.
구조
- 객체 생성을 캡슐화하는 패턴이다
- Creator의 서브 클래스에 팩토리 메소드를 정의한다
- 팩토리 메소드를 호출하여 적절한 ConcreteProduct 인스턴스를 반환하도록 한다.
구현방법
- Creator를 추상 클래스로 정의하고, 팩토리 메소드는 abstract로 선언하는 방법
- Creator가 구체 클래스고, 팩토리 메소드의 기본 구현을 제공하는 방법