디자인 패턴 : 추상 팩토리

정의

객체 생성과 구성(협력관계)을 추상화 시킨 패턴으로 서버 코드와 클라이언트 코드의 결합도를 낮춘 디자인 패턴

클라이언트 코드에서는 구현체가 아닌 인터페이스에 의존한다.

특징

  • 클라이언트는 추상화 레이어에 의존하기 때문에
    • 구현체와의 결합도가 낮아진다.
    • 구현체를 교체하는 비용이 낮아진다.
    • 대부분의 행위가 동적 바인딩으로 이루어지기 때문에 정적인 코드만으로는 내부적으로 어떻게 동작하는지 추적하기가 힘들다.
  • 구현체의 응집도가 높아진다.
    • 구현체의 생명주기가 팩토리 생성자에 의해 제어된다.
    • 구현체 사이의 일관성이 높다.
  • 추상 팩토리에 대한 의존성으로 인하여 확장에 패널티를 갖는다.
    • 표준화 인터페이스를 공유하는 특화 모듈을 구현할 때 마다, 추상 팩토리에서 요구하는 스펙을 모두 구현해야 한다.
    • 스펙 복잡도가 올라갈 수록, 모듈 추가비용이 상승한다.
    • 새로운 기능을 추가하려면, 기존에 구현된 특화 모듈에도 새로운 기능을 구현하는 과정이 요구된다.

구조

  • 추상화 레이어 (표준 인터페이스)
    • 추상 팩토리 레이어
    • 인터페이스 레이어
  • 구체 레이어 (특화 모듈)
    • 구체 팩토리 레이어 (모듈 생성 제어)
    • 인터페이스 구현 레이어 (모듈)

예제코드

Java Sample Code

예제코드 클래스 다이어그램

imgae

관련 패턴

  • 팩토리 메소드 패턴
  • 싱글톤 패턴
  • 프로로타입 패턴

참고자료

GoF의 디자인 패턴 p132 - p143

태그:

Back to Top ↑

댓글남기기