Skip to content

Latest commit

 

History

History
113 lines (83 loc) · 4.48 KB

Abstract Factory Pattern.md

File metadata and controls

113 lines (83 loc) · 4.48 KB

추상 팩토리 패턴(Abstract Factory Pattern)

추상 팩토리 패턴 은 생성 패턴으로, 팩토리 메소드 패턴과 함께 Simple Factory와 관련있는 패턴이다. 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴이다. 싱글톤, 팩토리 메소드 패턴을 사용한다.


abstract
Reference


UML Diagram의 각 요소는 다음과 같다.

  • Abstract Factory
    구현 팩토리 클래스의 공통 인터페이스
  • Concrete Factory
    구현된 팩토리 클래스로 AbstractFactory 클래스의 추상 메서드를 오버라이드함으로써 구체적인 제품을 생성한다.
  • Abstract Product
    제품의 공통 인터페이스
  • Concrete Product
    구현 팩토리 클래스를 통해 생성되는 구현된 제품

차이

팩토리 메소드 패턴 은 어떠한 객체를 생성할 것인지를 하위 클래스에 위임하는데에 핵심이 있다. 결론적으로 팩토리 메소드 패턴은 서로 다른 객체를 생성할 수 있는 하나의 메소드 를 제공한다. 그리고 메소드를 통해 하나의 객체를 생성한다.

추상 팩토리 패턴 은 연관 관계를 가진 객체의 집합 을 생성하는데에 중점을 둔다. 구현하고자 하는 객체의 하위클래스(Factory)를 생성하고, 원하는 하위 클래스를 결합하는 형태이다. 그래서 팩토리 클래스는 여러개의 팩토리 메소드 를 갖는 형태가 된다.


public interface Monitor { }
public class NormalMonitor implements Monitor { }
public class GamingMonitor implements Monitor { }

public interface Mouse { }
public class NormalMouse implements Mouse { }
public class GamingMouse implements Mouse { }
public interface ComputerFactory {
    Monitor createMonitor();
    Mouse createMouse();
}

public class NormalComputerFactory extends ComputerFactory {
    @Override
    public Monitor createMonitor(){
      return new NormalMonitor();
    }
    @Override
    public Mouse createMouse(){
      return new NormalMouse();
    }
}

public class GamingComputerFactory extends ComputerFactory {
    @Override
    public Monitor createMonitor(){
      return new GamingMonitor();
    }
    @Override
    public Mouse createMouse(){
      return new GamingMouse();
    }
}
public class Client {
    public static void main(String[] args) {
        ComputerFactory normalComputerFactory = new NormalComputerFactory();
        ComputerFactory gamingComputerFactory = new GamingComputerFactory();

        Monitor normalMonitor = normalComputerFactory.createMonitor();
        Mouse normalMouse = normalComputerFactory.createMouse();

        Monitor gamingMonitor = gamingComputerFactory.createMonitor();
        Mouse gamingMouse = gamingComputerFactory.createMouse();
    }
}

추상 팩토리 패턴 장단점

장점

추상 팩토리 패턴 도 팩토리 메서드 패턴과 마찬가지로 기존 코드를 수정하지 않고 확장할 수 있어 개방 폐쇄 원칙(Open-Closed Principle, OCP)을 지킨다. 또한 여러 개의 비슷한 집합 객체 생성을 하나의 팩토리에 모아둘 수 있다.

단점

팩토리 메서드 패턴과 동일하게 구현하는 클래스의 개수, 코드량이 증가 한다는 단점이 있다. Factory 클래스가 한 종류만 필요할 경우에는 비효율적인 방식이다.

팩토리 메서드 패턴추상 팩토리 패턴 은 무엇이 더 좋다고 구분할 수 없고, 주어진 상황에 적합한 패턴을 선택하여 사용해야한다.



Reference

📄https://stackoverflow.com/questions/5739611/what-are-the-differences-between-abstract-factory-and-factory-design-patterns
📄https://bcp0109.tistory.com/368
📄https://kotlinworld.com/366
📄https://whereami80.tistory.com/211
📄https://www.dofactory.com/net/abstract-factory-design-pattern
📄https://gmlwjd9405.github.io/2018/08/08/abstract-factory-pattern.html
📄https://yeah.tistory.com/13