추상 팩토리는 공통점을 가지고 있는 개별적인 팩토리들의 그룹을 캡슐화시키는 방법을 제공한다.

 

 

UML class diagram - wiki

 

사용

 

추상팩토리 디자인 패턴은 다음과 같은 문제들을 해결하는데 사용할 수 있다.

 

체가 생성되는 방식과의 응용프로그램의 독립성을 어떻게 구현을 할 것인가?

클래스가 필요한 객체가 생성되는 방식과, 클래스의 독립성을 어떻게 구현 할 것인가?

관련되거나 의존관계가 있는 그룹을 어떻게 생성할 것인가?

 

예시

 

조금 더 구체적인 예시를 들자면 서로 다른 OS의 UI를 구현하는 상황을 들 수 있다.

 

윈도우와 Mac은 각각의 브라우저에 고유한 버튼과 체크박스 UI를 가지고 있다.

하지만 윈도우나 Mac 모두 브라우저가 실행될때 버튼과 체크박스를 렌더링 해야 한다.

이런 경우에 리눅스용 브라우저가 추가되고 리눅스용 체크박스와 버튼의 UI를 추가해야 하는 상황을 생각해보자.

어떻게 해야 기존 코드들의 변경을 최소화하고 리눅스용 브라우저 추가 이후에도 확장이 쉽도록 구현할 수 있을까?

 

브라우저가 체크박스와 버튼을 렌더링 하는 기능은 공통부분이며, 체크박스와 버튼의 UI를 구현하는 것은 각각 독립적으로 구현해야 하는 부분이다.

 

이런 경우에 OS에 상관없이 브라우저가 체크박스와 버튼을 구현하는 팩토리 인터페이스를 하나 만들고, OS별로 해당 인터페이스를 구현하여 각 OS에 맞는 UI를 구현할 수 있게 된다.

또한 체크박스와 UI도 인터페이스를 생성하고, 각각의 OS에 해당하는 구체적인 서브클래스들을 만들게 되면, 브라우저에서 체크박스와 버튼을 사용할 때 공통 타입으로 사용할 수 있게 된다.

 

The cross-platform UI classes example.

 

https://refactoring.guru/design-patterns/abstract-factory

https://en.wikipedia.org/wiki/Abstract_factory_pattern

+ Recent posts