본문 바로가기
Study/디자인 패턴

[C#/Unity][디자인패턴] 팩토리 메서드 패턴(Factory Method Pattern)

by 스테디코디스트 2023. 11. 9.
반응형

1. 팩토리 메서드 패턴이란?

- 생성하는 공장은 단 한 개만 존재, 하지만 자식 클래스에 의해 여러 방식들로 구현 가능!

- 객체를 생성하는 방법을 해당 클래스를 상속 받은 클래스에서 명시하도록 하는 패턴

- 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생설될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴

- 클래스에서 객체를 생성하기 위해 일반적으로 생성자를 만들지만 팩토리 메서드 패턴을 사용하면 이런 행위를 위임받아서 실행함.

 

2. 팩토리 메서드 패턴을 사용하는 경우

1) 코드가 높은 수준의 유연성을 제공해야 할 경우

2) 프로그램의 뼈대를 만들 경우

3) 추후 확장이 필요할 수 있는 경우

 

3. 팩토리 메서드 패턴의 장점

1) 유지보수 용이 : 객체의 생성을 한 군데에서 관리할 수 있고, 동일한 인터페이스 구현으로 새로운 객체가 추가되더라도 소스의 수정이 거의 없다.

2) 다형성 : 부모인 팩토리 클래스 입장에서는 자식 클래스가 어떻게 생성하는지 알 필요 없이 그냥 생성만 해주면 된다.

3) 협업성 : 구조가 잡힌 상태에서 여러 사람이 각자 파생 클래스를 구현하게 되어 협업이 가능하다.

4) 유연성 : 기능이 바뀌거나 새로운 기능을 추가할 때 해당 객체만 변경하면 되기 때문에 객체 생성 코드를 유연하게 변경할 수 있다.

5) 중복제거 : 중복 기능을 묶어 다른 클래스로 생성하여 구조를 잡을 수 있다.

 

4. 팩토리 메서드 패턴의 단점

1) 복잡성 : 코드가 복잡해질 수 있다.

2) 가독성 : 코드 가독성에 영향을 줄 수 있음.

3) 유지보수 비용 : 유지보수 비용이 높아질 수 있음.

 

5. 코드 구현

<구조>

- Product  : 팩토리 메서드로 생성될 공용 객체 (주로 추상 클래스 또는 인터페이스)

- Creator : Product가 구현하는 메서드가 존재 (주로 추상 클래스 또는 인터페이스)

- ConcreteProduct : Product를 상속받는 객체

- ConcreteCreator : Creator를 상속받는 객체

  Product Creator
부모 Product Creator
자식 ConcreteProduct ConcreteCreator

 

1) Product 

// Product - 생성할 객체의 공통적인 특성을 지닌 추상 클래스
abstract class Animal
{
    protected string name;
}

 

2) Creator

// Creator - Poduct 타입의 객체를 반환하는 메서드를 선언하는 추상 클래스
abstract class Creator
{
    private List<Animal> _Animals = new List<Animal>();
    
    public Creator() {}
    
    public List<Animal> Animals
    {
    	get => _Animals;
    }
}

 

3) ConcreteProduct

// ConcreteProduct - Product를 상속받아서 구현
class Dog : Animal
{
    public Dog()
    {
    	name = "Dog";
        Console.WriteLine(this.name);
    }
}

class Cat : Animal
{
    public Cat()
    {
    	name = "Cat";
        Console.WriteLine(this.name);
    }
}

 

4) ConcreteCreator

// ConcreteCreator - Creator를 상속받아 오버라이딩
class PatternA : Creator
{
    public override void CreateAnimals()
    {
    	Animals.Add(new Dog()):
        Animals.Add(new Cat()):
    }
}

class PatternB : Creator
{
    public override void CreateAnimals()
    {
    	Animals.Add(new Cat()):
        Animals.Add(new Dog()):
    }
}

<참고 사이트>

 

[디자인패턴] 팩토리 메서드 패턴(Factory Method Pattern)

1. 팩토리 메서드 패턴이란? 2. 팩토리 메서드 패턴의 장단점 3. 팩토리 메서드 패턴 예시 코드 1. 팩토리 메서드 패턴이란? : 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스

geukggom.tistory.com

 

Chapter 5. 팩토리 메서드 패턴(Factory Method Pattern)

인프런에 있는 이재환님의 강의 게임 디자인 패턴 with Unity 를 듣고 정리한 필기입니다. 😀

ansohxxn.github.io

 

 

2. Factory Method Pattern ( 팩토리 매소드 패턴 C# )

[읽기전에] UML 다이어그램 : UML클래스 다이어그램 기본상식 http://hongjinhyeon.tistory.com/25 포스팅되는 디자인 패턴의 예는 스타크래프트를 기본으로 하였습니다 : 디자인 패턴을 시작하며 http://hongji

hongjinhyeon.tistory.com

 

 

C# - 디자인 패턴 - 팩토리 메소드 패턴 (Factory Method Pattern)

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

math-development-geometry.tistory.com