소프트웨어 스터디/디자인패턴

Factory Method Pattern

로 얄 2021. 1. 6. 17:56
반응형

정의

Factory method pattern은 interface나 abstract class로 정의된 오브젝트를 직접 생성하는 것이 아니라 이 생성을 subclass가 결정하여 하도록 하는 것입니다. 결론적으로 객체를 subclass가 만든다 입니다.

말로 설명하는 것 보단 코드를 보는게 더 이해가 쉽겠죠?

코드

도형을 생성하는 것을 예제로 코드를 구성해보려고 합니다.

public interface Shape {
    void draw();
}

interface로 Shape을 만들고 사용할 도형들을 아래와 같이 구현합니다.

enum ShapeTypes {
    Ellipse,
    Rectangle,
    Polygon
}

public class Ellipse implements Shape {
    @Override
    public void draw() {
        // TODO draw ellipse
        System.out.println("draw Ellipse");
    }
}

public class Rectangle implements Shape {
    @Override
    public void draw() {
        // TODO draw rect
        System.out.println("draw Rectangle");
    }
}

public class Polygon implements Shape {
    @Override
    public void draw() {
        // TODO draw polygon
        System.out.println("draw Polygon");
    }
}
public class ShapeFactory {
    public Shape getShape(ShapeTypes type) {
        switch (type) {
            case Ellipse:
                return new Ellipse();
            case Rectangle:
                return new Rectangle();
            case Polygon:
                return new Polygon();
            default:
                throw new IllegalArgumentException();
        }
    }
}

ShapeFactory class 와 같이 Shape을 생성하는 부분을 해당 class를 통하여 받도록 처리합니다.

 

사용의 이점은 아래와 같습니다.

  • Factory를 통해 객체들이 생성되기 된니다. 즉 한곳에서 생성되기 때문에 관리가 쉬워집니다.
  • 동일간 분류의 새로운 기능이 추가될 때등의 확장성이 용의합니다. 
  • 특히 협업을 할 경우 새로운 객체가 추가될 때 보다 약속된 플레이가 가능해집니다.
  • 또한 추상화된 객체를 사용하기 때문에 유연성이 높아진다고 볼 수 있습니다.
반응형

'소프트웨어 스터디 > 디자인패턴' 카테고리의 다른 글

Builder Pattern - 빌더패턴  (0) 2021.01.07
Singleton 패턴  (0) 2021.01.05