팩토리 메소드 패턴
- 특정 상황에서 조건에 따라 객체를 다르게 생성하기 위해 사용
- 분기에 따른 객체를 직접 생성하지 않고 팩토리 라는 클래스에 위임하여 팩토리 클래스가 객체를 생성하도록 하는 방식
- 팩토리는 객체를 찍어내는 공장을 의미한다
팩토리 메소드 패턴을 사용하는 이유
- 객체 생성에 필요한 과정을 템플릿 처럼 정해 놓고 각 과정에 대한 다양한 구현이 가능하다
- 이를 통해 구체적으로 생성할 객체를 유연하게 정할 수 있다
- 객체 생성에 대한 인터페이스와 구현을 분리하여 시스템 확장성과 유지보수성을 높인다
예제코드 정리
- 객체 생성에 대한 인터페이스 부분과 구현 부분이 분리되어 있다
- 예제에서는 Factory 추상 클래스와 Item 인터페이스가 생성에 대한 인터페이스 부분이다
- 추상클래스를 상속받아 확장한 ItemFactory 클래스와 Item 인터페이스를 구현한 Bow , Shield , Sword 클래스가 생성에 대한 구현 부분이 된다
- 생성에 대한 인터페이스와 구현부분을 분리하면 인터페이스 부분이 구현부분을 전혀 몰라도 된다는 의미이다
- 그러면 추후에 구현부분과 인터페이스 부분을 별도의 패키지로 분리해서 구분이 가능하게 된다
- 패키지를 분리하면 여러 개발자가 협업을 통해 개발할 수 있게 되는 장점이 있다
- 기존에 구현부분을 그대로 사용하고 새로운 구현부를 추가하여 시스템을 확장해 나갈수 있다
- 예) 무기에 대한 생성부분은 그대로 두고 음식에 대한 생성부분을 추가하고자 하는 경우
- Factory 추상클래스를 상속받은 FoodFactory 클래스만 추가해주면 된다
- 또한, Item 인터페이스를 구현하는 구체화된 음식 클래스만 구현해주면 쉽게 확장이 가능해 진다