1. 요약

팩토리 메소드 패턴은 생성패턴의 한 종류로 객체를 생성하는 방법을 해당 클래스를 상속 받은 클래스에서 명시하도록 하는 패턴입니다. 일반적으로 클래스에서 객체를 생성하기 위해서는 생성자를 만드는게 일반적인데요. 팩토리 메소드 패턴은 이런 행위를 위임하게 됩니다. 

2. 팩토리 메소드 패턴

팩토리 메소드 패턴을 이해하기 위해서는 추상 클래스에 대한 이야기부터 해야합니다. 추상 클래스는 아래 링크에서 찾아볼 수 있습니다. https://math-development-geometry.tistory.com/40?category=708726

 

C# - 추상 클래스, 가상 클래스 - abstract, virtual 사용법

지난 포스팅 인터페이스에서 잠시 언급된 추상과 가상에 대한 이야기를 하도록 하겠습니다. 추상과 가상을 먼저 이야기 했으면 좋았겠지만, 제 포스팅은 그냥 의식의 흐름으로 적는 포스팅이기 때문에 순서가 엉망..

math-development-geometry.tistory.com

추상 클래스는 해당 클래스의 기능을 구현할 수 있기도 하지만 파생 클래스에서 해당 기능을 직접 구현할 수 있도록 인터페이스를 제공하는 기능을 하게 됩니다. 여기서 팩토리 메소드 패턴을 사용하기 위해서는 메소드를 추상으로 선언하여 해당 클래스를 상속 받은 파생 클래스에서 생성하는 기능을 구현하게 됩니다. 이렇게 되면 기본적인 구조가 잡힌 상태에서 여러 사람이 각자 파생 클래스를 구현하게 되면서 협업이 가능하게 됩니다. 또 기능이 바뀌거나 새로운 기능을 추가할때 해당 객체만 변경하면 되기 때문에 객체를 생성하는 코드가 유연하게 변경할 수 있는 장점이 있습니다. 그리고 필요한 경우 증복 기능을 묶어 다른 클래스로 생성하여 구조를 잡을 수 있습니다. 

일반적으로 팩토리 메소드 패턴의 경우 Product, ConcreteProduct, Creator, ConcreteCreator로 4가지로 나눠 구현을 하게 됩니다. Product는 팩토리 메서드로 생성될 공용 객체입니다. 그리고 ConcreteProduct 는 Product를 상속받아 생성되는 클래스입니다. ConcreteProduct는 필요에 따라서 생성이 가능합니다. Creator는 Product를 생성하는 메서드가 있는 클래스입니다. ConcreteCreator는 팩토리 메서드를 구현하는 클래스로 Creator를 상속받아 각각의 ConcreteProduct를 구현하는 메서드가 명시되어 있습니다.

  Product Creator
- Product Creator
Concrete ConcreteProduct ConcreteCreator

4가지를 구분하는 방법은 Product는 실제 객체 클래스를 표현하고 Creator는 생성되는 메서드가 있는 클래스입니다. 그리고 - 는 상속을 할 클래스이고 Concrete는 -를 상속 받은 클래스입니다. 

3. 예제

해당 예제를 통해서 자세하게 알아보도록 하겠습니다. 해당 코드는 삼각형, 사각형과 같은 도형을 표현하는 클래스를 팩토리 메서드 패턴을 이용하여 제작한 것입니다. 

Shape은 모든 도형의 파생 클래스가 됩니다. 팩토리 메소드 패턴의 Product가 됩니다. 그리고 Shape을 상속 받아서 다양한 도형을 만들 수 있습니다. 그렇게 만들어진 도형이 ConcreteProduct입니다.

이제 Creator 클래스입니다.

그리고 Circle과 Triangle를 생성하는 Creator는 아래와 같습니다. 

예제 코드는 아주 간단한 코드만 작성한 것인데요. 이를 좀 더 자세하게 작성하면서 생성하는 코드와 실제 코드를 구분하며 객체를 생성하는 Factory를 따로 작성하는 것입니다.

+ Recent posts