추상 팩토리 패턴

Lee·2023년 5월 22일
0

디자인 패턴

목록 보기
6/7

추상 팩토리 패턴

  • 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 디자인 패턴
  • 상세 서브클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공

구현

public abstract class AbstractFactory {
    abstract Motor createMotor();
    abstract Wheel createWheel();
}
  • 자동차 생산을 위한 factory class
public class MotorVehicleFactory extends AbstractFactory {
    @Override
    Motor createMotor() {
        return new MotorVehicleMotor();
    }

    @Override
    Wheel createWheel() {
        return new MotorVehicleWheel();
    }
}
  • 일반 자동차 생산을 위한 factory class
public interface Motor {
    void equip();
    String type();
}
  • 모터를 추상화한 인터페이스
public interface Wheel {
    void equip();
    String type();
}
  • 바퀴를 추상화한 인터페이스
public class MotorVehicleMotor implements Motor{
    @Override
    public void equip() {
        System.out.println("일반차용 모터가 장착되었습니다.");
    }

    @Override
    public String type() {
        return "Motor";
    }
}
  • 모터 인터페이스를 구현한 일반 자동차용 모터 클래스
public class MotorVehicleWheel implements Wheel {
    @Override
    public void equip() {
        System.out.println("일반차용 바퀴가 장착되었습니다.");
    }

    @Override
    public String type() {
        return "Wheel";
    }
}
  • 바퀴 인터페이스를 구현한 일반 자동차용 바퀴 클래스

사용 이유

  1. 관련 제품의 다양한 제품군과 함께 작동해야 할때, 해당 제품의 구체적인 클래스에 의존하고 싶지 않은 경우
  2. 객체 생성 정보를 캡슐화를 통해 은닉할 경우

단점

  1. 각 제품 구현체마다 팩토리 객체를 모두 구현해주어야 하기 때문에 서브 클래스 수가 증가
  2. 추상 팩토리의 내부사항 변경 시 모든 팩토리에 대한 수정이 필요하다.

참고
추상 팩토리(Abstract Factory) 패턴 - 완벽 마스터하기

profile
발전하고 싶은 백엔드 개발자

0개의 댓글