CS/디자인 패턴

(CS) 디자인 패턴 - 팩토리 패턴

흰색텀블러 2025. 1. 9. 21:51

팩토리 패턴

  • 정의
    • 객체를 사용하는 코드에서, 객체 생성 부분을 떼어내 추상화한 패턴
    • 상속 관계에 있는 두 클래스에서 상위 클래스가 뼈대를 결정하고, 하위 클래스에서 객체의 구체적 내용을 결정하는 패턴
  • 장점
    • 유연성
      • 상위, 하위 클래스가 분리 되기 떄문에 loose 한 결합을 가진다.
      • 인스턴스 생성방식에 전혀 알 필요가 없다
    • 캡슐화
      • 객체 생성 로직이 따로 떼어져 있기 때문에 리팩토링시, 특정 위치만 고치면 되므로, 유지 보수성이 증가한다.
    • 확장성
      • 새로운 클래스 추가 시 기존 코드를 수정하지 않고 확장할 수 있다
  • 단점
    • 복잡성 증가
      • 클래스가 많아지기 때문에, 코드 구조가 복잡해질 수 있다
    • 추가 계층
      • 팩토리 클래스가 추가되기 때문에, 코드의 가독성이 낮아질 수 있다
  • 사용하는 곳
    • 객체 생성 로직이 복잡한 경우
    • 객체 생성 시점이나 생성 방법을 유연하게 변경해야 하는 경우
    • 클라이언트 코드가 특정 클래스에 의존하지 않도록 해야 할때
  • 코드
// Shape.java

public interface Shape {
    void draw();
}


// Circle.java

public class Circle implements Shape {
    public void draw() {
        System.out.println("Circle.");
    }
}


// Rectangle.java

public class Rectangle implements Shape {
	public void draw() {
    	System.out.println("Rectangle");
    }
}

 

  • 코드 - 팩토리
// Factory

public class ShapeFactory {
    public Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }
        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new Rectangle();
        }
        return null;
    }
}

 

  • 코드 - 팩토리 데모(main 포함)
public class FactoryPatternDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactory();

        Shape circle = shapeFactory.getShape("CIRCLE");
        circle.draw();

        Shape rectangle = shapeFactory.getShape("RECTANGLE");
        rectangle.draw();
    }
}

 

'CS > 디자인 패턴' 카테고리의 다른 글

(CS) 디자인 패턴 - 전략 패턴  (1) 2025.01.09
(CS) 디자인 패턴 - 싱글톤 패턴  (0) 2025.01.07