팩토리 메소드 패턴 ( Factory method Pattern)
팩토리 메소드 패턴(Factory method pattern)의 개념
- 인스턴스화가 아닌 상속을 통해 객체를 생성한다.
- 유동적인 디자인으로 특정 객체가 아닌 인스턴스나 서브 클래스 객체를 반환할 수 있다.
- 인터페이스를 통해 객체를 생성하지만 팩토리가 아닌 서브 클래스가 해당 객체 생성을 위해 어떤 클래스를 호출할지 결정한다.
팩토리 메소드 패턴 예제 코드
로봇을 조립하는 코드를 만든다고 생각하자. 로봇 조립에 필요한 각 부품들에 대한 클래스를 선언한다.
그리고 각 로봇들에 대해 클래스를 선언합니다. add_part로 로봇 별로 필요한 부품을 추가합니다.
선언한 로봇 클래스의 “assemble_parts”를 이용해 로봇을 조립합니다.
팩토리 메소드 패턴의 장점
- 유연성과 포괄성을 갖추며 한 클래스에 종속되지 않는다.
- 객체를 생성하는 코드와 활요하는 코드를 분리하여 의존성이 줄어든다.
- 새로운 클래스 추가 등의 유지보수가 쉽다.
추상 팩토리 패턴 ( Abstract factory Pattern)
추상 팩토리 패턴 ( Abstract factory Pattern)의 개념
- 클래스를 직접 호출하지 않고 관련 객체를 생성하는 인터페이스를 제공한다.
- 팩토리 메소드는 인스턴스 생성을 서브 클래스에 맡기는 반면 추상 팩토리는 관련된 객체의 집합을 생성한다.
- 클라이언트는 객체 생성 로직과 상관없이 생성된 객체를 사용하며, 오직 인터페이스를 통해 객체에 접근할 수 있다.
추상 팩토리 패턴 예제 코드
이번엔 각 로봇을 만드는 가계가 있다고 생각하자. 각각의 가계에선 개 로봇과 새 로봇을 만든다.
개 로봇은 짖기 기능, 새 로봇은 날기 기능이 있다.
각각의 가계의 로봇들의 기능을 실행시키면 아래의 처럼 출력된다.
이를 이용해 원하는 가계를 선택하여 선택한 가계의 로봇을 가져와 기능을 사용할 수 있다.
이처럼 추상 팩토리 패턴을 이용하여 관련된 객체의 집합을 가져올 수 있고, 가계(인터페이스)를 통해 기계(객체)에 접근할 수 있다.
추상 팩토리 패턴의 장점
- 추상 팩토리 패턴은 확장에 매우 용의한 패턴이다.
- 추상 팩토리 패턴은 기존 팩토리 패턴의 if-else 로직에서 벗어날 수 있게 해준다.
- 구체적인 클래스는 분리 되어있다.
팩토리 메소드 패턴과 추상 팩토리 패턴은 공통점도 있지만 차이가 극명하기 때문에 필요한 상황에 맞게 사용하는 것이 중요하다.